我正在阅读 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 之类的东西时调试器可能不是最好的主意,因为...
- 您的程序一开始就可能已损坏,使
fork()
不安全; - 您可能希望使用与程序硬编码不同的东西进行调试;
- 普通应用程序用户不知道如何使用调试器;
- 任何有能力使用调试器的人通常更喜欢核心转储而不是自动调用的调试器。
我可以复制到测试台的核心转储在一天中的任何时候都比客户工作场所的调试器实例好。调试器界面会产生糟糕的最终用户错误消息。
关于c - 从 C 程序中调用调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11499554/