c - gdb 给出一个函数名后跟一个数字而不是文件和行号

标签 c debugging segmentation-fault gdb

我的程序中有一个段错误,我正在使用 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/

相关文章:

c - C语言仿射密码获得相同 key

c - 是否可以可移植地定义一个接受任意数量参数的函数?

node.js - 运行 "Request Log.enable failed"时出现错误 "node --inspect"

objective-c - 设备上抛出异常,但模拟器中未抛出异常

android - 如何找出Android中SIGSEGV的原因

iphone - sigsegv 在 iphone 上因 crittercism 崩溃

C - 尝试发送()数据但有错误

c - C语言中的奇数?铅 'ram or algorithm' !

java - 调试 "step over"比 "resume"花费的时间长得多

c++ - QPainter.drawText() SIGSEGV 段错误