关于c程序的调试

时间:2011-02-13 05:20:29

标签: c debugging

我有一个C程序会抛出段错误。但是,因为我使用gdb来找出抛出错误的位置。我得到以下堆栈信息...我不明白为什么#1指向??()。可能的原因是什么?感谢。

#0  __longjmp () at ../sysdeps/i386/__longjmp.S:68
#1  0x43746a57 in ?? ()

3 个答案:

答案 0 :(得分:2)

为了调试程序,您需要使用包含的调试符号对其进行编译,如果使用GCC进行编译,则可以使用-g3标志进行编译。当您在GDB中运行程序的调试版本并执行bt(用于“回溯”)时,您应该得到更明智的输出。

答案 1 :(得分:1)

gdb不知道函数的名称,所以它放了??

您是否尝试使用调试符号进行编译?

答案 2 :(得分:0)

如果longjmp()误入歧途,则问题很可能是您滥用它 - 要么通过jmpbuf传递setjmp()调用永远不会被jmpbuf调用,或者通过传递已经返回的例程中设置的-g

有关如何通过调试信息查找更多信息,请参阅其他答案并使用{{1}}选项进行编译。