这在gdb中意味着什么?

时间:2010-06-22 18:20:45

标签: c debugging gcc gdb

编程接收信号SIGSEGV,分段故障。 execute_jobs()中的0x08049795 当前语言:auto;目前asm

(gdb)信息符号0x08049795 section_text

中的execute_jobs + 22

(gdb)ptype 0x08049795 type = int

如何获取发生错误的行号?

2 个答案:

答案 0 :(得分:7)

您的二进制文件未使用调试信息进行编译。至少使用-g(或-ggdb-ggdb -g3进行重建,请参阅GCC manual。)

GDB输出的确切行:

(gdb) info symbol 0x08049795 execute_jobs + 22 in section .text

表示地址0x08049795的指令(从函数execute_jobs开始是22个字节)生成了分段错误。

(gdb) ptype 0x08049795 type = int

这里你要求的是一个整数的类型,GDB很乐意回复。做

(gdb) x/10i 0x08049795

(gdb) disassemble execute_jobs

查看实际说明。

答案 1 :(得分:2)

gdb命令“bt”将显示返回跟踪。除非你已经损坏了堆栈,否则这应该显示导致segfault的函数调用序列。要获得更有意义的信息,请确保通过在gcc / g ++命令行中包含-g来编译包含调试信息的程序。