我有一个C程序会抛出段错误。但是,因为我使用gdb来找出抛出错误的位置。我得到以下堆栈信息...我不明白为什么#1指向??()。可能的原因是什么?感谢。
#0 __longjmp () at ../sysdeps/i386/__longjmp.S:68
#1 0x43746a57 in ?? ()
答案 0 :(得分:2)
为了调试程序,您需要使用包含的调试符号对其进行编译,如果使用GCC进行编译,则可以使用-g3
标志进行编译。当您在GDB中运行程序的调试版本并执行bt
(用于“回溯”)时,您应该得到更明智的输出。
答案 1 :(得分:1)
gdb不知道函数的名称,所以它放了??
。
您是否尝试使用调试符号进行编译?
答案 2 :(得分:0)
如果longjmp()
误入歧途,则问题很可能是您滥用它 - 要么通过jmpbuf
传递setjmp()
调用永远不会被jmpbuf
调用,或者通过传递已经返回的例程中设置的-g
。
有关如何通过调试信息查找更多信息,请参阅其他答案并使用{{1}}选项进行编译。