2011-02-13 47 views
0

我有一个C程序引发segfault。但是,正如我使用gdb找出错误发生的位置。我得到以下堆栈信息...我不明白为什么#1指向?()。这有什么可能的原因?谢谢。在调试c程序

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

回答

1

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

你试过编译调试符号吗?

2

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

+0

谢谢。我不知道我是否理解正确。我试过如下, 'gcc -g3 XXX' 并运行gdb。碰撞和打字bt后,gdb输出完全相同的东西...现在没有想法。 – Richard 2011-02-13 06:09:58

0

如果longjmp()误入歧途,因为它似乎是,那么问题很可能是你滥用它 - 无论是通过传递jmpbuf这是从来没有被setjmp()调用初始化,或通过传递在一组jmpbuf已经返回的例程。

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