c - 从 C 程序中调用调试器

标签 c linux gdb systems-programming

我正在阅读 David Hanson 的书 - “C 接口(interface)和实现”。这个练习题看起来很有趣,但我无法找到解决方案:

On some systems, a program can invoke a debugger on itself when it has detected an error. This facility is particularly useful during development, when assertion failures may be common.

您能否提供一个关于如何调用调试器的简短示例。

void handle_seg_fault(int arg)
{
    /* how to invoke debugger from within here */
}

int main()
{
    int *ptr = NULL;
    signal(SIGSEGV, handle_seg_fault);
    /* generate segmentation fault */
    *ptr = 1;
}

最佳答案

详细阐述 Christian.K 的评论,fork()面对 SIGFPE 或 SIGSEGV 之类的东西时调试器可能不是最好的主意,因为...

  1. 您的程序一开始就可能已损坏,使 fork() 不安全;
  2. 您可能希望使用与程序硬编码不同的东西进行调试;
  3. 普通应用程序用户不知道如何使用调试器;
  4. 任何有能力使用调试器的人通常更喜欢核心转储而不是自动调用的调试器。

我可以复制到测试台的核心转储在一天中的任何时候都比客户工作场所的调试器实例好。调试器界面会产生糟糕的最终用户错误消息。

关于c - 从 C 程序中调用调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11499554/

相关文章:

objective-c - 如何修复错误格式指定类型 'char *' 但参数的类型为 'char'

linux - date -d 在 Mac 上不工作

linux - 为什么 "pip install tornado"没有安装tornado模块?

C 编程。尝试循环诱使用户输入正数

c - 在 Visual C 的动态链接库中使用共享内存

c++ - 未使用 -g 选项编译的代码的调用堆栈(gcc 编译器)

python - Sploitfun-GDB 中无法 "peform"基于堆栈的缓冲区溢出

c - gdb - 如何为指针数组调用 memset

c - 如何将多个小数百分比与 printf 对齐

linux - 在 ping 中使用 -m 选项