【问题标题】:What does this mean in gdb?这在 gdb 中是什么意思?
【发布时间】:2011-03-06 23:20:30
【问题描述】:

程序收到信号SIGSEGV,分段错误。 execute_jobs()中的0x08049795 当前语言:自动;目前asm

(gdb) 信息符号 0x08049795 .text 部分中的 execute_jobs + 22

(gdb) ptype 0x08049795 类型 = 整数

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

【问题讨论】:

  • 首先,您需要使用 -ggdb3 进行编译,然后 GDB 会为您提供该信息。
  • 使用调试符号编译,不进行优化,然后通过 valgrind 运行。您将立即看到段错误的原因,只需观看烟花:) 见valgrind.org

标签: c debugging gcc gdb


【解决方案1】:

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

【讨论】:

  • 程序收到信号SIGSEGV,分段错误。 0x0804ae2a in job_comparator_randomjobid (element1=0x804d0c0, element2=0x804d60c) at ./machinejob.c:860 860 JOB job1 = ((JOB) element1); (gdb) info symbol 0x0804ae2a job_comparator_randomjobid + 20 in section .text 上面的 20 是什么?
【解决方案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

查看实际说明。

【讨论】:

  • 程序收到信号SIGSEGV,分段错误。 0x0804ae71 in job_comparator_randomjobid (element1=0x804d0c0, element2=0x804d354) at ./machinejob.c:860 860 JOB job1 = ((JOB) element1);如何确定导致分段错误的确切错误?
  • @blacktooth,您必须在第 860 行附近显示来自 machinejob.c 的代码,我们才能为您提供帮助。 JOB 是什么?指针? element1 的类型是什么?根本原因是某处的地址无效。
猜你喜欢
  • 2011-12-19
  • 2013-02-26
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2013-08-17
相关资源
最近更新 更多