首页 文章

这在gdb中意味着什么?

提问于
浏览
1

程序接收信号SIGSEGV,分段故障 . 0x08049795 in execute_jobs()当前语言:auto;目前asm

(gdb)信息符号0x08049795 execute_jobs 22 in section .text

(gdb)ptype 0x08049795 type = int

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

2 回答

  • 2

    您的二进制文件未编译调试信息 . 重建至少 -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
    

    看实际指示 .

  • 7

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

相关问题