use*_*645 5 c linux gdb systems-programming
我正在读大卫汉森的书"C接口和实现".这个练习题似乎很有趣,无法找到解决方案:
在某些系统上,程序在检测到错误时可以自行调用调试器.当断言失败可能很常见时,此工具在开发期间特别有用.
您能否提供一个关于如何调用调试器的简短示例.
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;
}
Run Code Online (Sandbox Code Playgroud)
详细阐述 Christian.K 的评论,fork()面对 SIGFPE 或 SIGSEGV 之类的东西使用调试器可能不是最好的想法,因为......
fork()不安全;我可以复制到测试台的核心转储在一天中的任何时间都击败了客户工作场所的调试器实例。调试器界面会产生糟糕的最终用户错误消息。