我的程序中有一个段错误,我正在使用 gdb
来确定它发生的位置。但是,我无法看到发生错误的明确行号。
下面是我的输出截图。
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 20065168 (LWP 4645)] 0x007e537f in _int_free () from /lib/libc.so.6 (gdb) backtrace #0 0x007e537f in _int_free () from /lib/libc.so.6 #1 0x007e90f0 in free () from /lib/libc.so.6 #2 0x080d9e67 in CRYPTO_free () #3 0xbfd15f7c in ?? () #4 0xbfd16108 in ?? () #5 0x08070b3e in function_random.19532 () #6 0x00000001 in ?? () #7 0x00000000 in ?? () (gdb)
frame 5
是我写的那段代码,但是不太明白是什么意思。
有人可以解释一下吗?
最佳答案
在您的情况下,调试符号很可能不存在于二进制文件中。这就是为什么 gdb
无法读取调试信息并显示它们。
在启用调试的情况下重新编译您的代码。
示例:对于 gcc
,使用 -g
选项。
关于c - gdb 给出一个函数名后跟一个数字而不是文件和行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30182584/