编程接收信号SIGSEGV,分段故障。 execute_jobs()中的0x08049795 当前语言:auto;目前asm
(gdb)信息符号0x08049795 section_text
中的execute_jobs + 22(gdb)ptype 0x08049795 type = int
如何获取发生错误的行号?
答案 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来编译包含调试信息的程序。