核心文件中的地址是什么?

时间:2012-01-07 21:54:59

标签: linux gdb core

这是我核心档案的一部分:

[New Thread 30385]
[New Thread 30383]
[New Thread 30381]
[New Thread 30379]
[New Thread 30378]
[New Thread 30270]
[New Thread 30268]
Core was generated by `test'.
Program terminated with signal 11, Segmentation fault.
#0  0x001cd1a6 in ?? ()

这是否意味着我的程序在0x001cd1a6崩溃或程序在尝试读/写该地址时崩溃?
该地址没有可执行代码 另一件事是它每次崩溃都会给出一个不同的地址。

1 个答案:

答案 0 :(得分:3)

  

这是否意味着我的程序崩溃在0x001cd1a6

  

该地址没有可执行代码。

嗯,这肯定会导致崩溃(由于非法指令)。

  

另一件事是它每次崩溃都会给出不同的地址。

您的程序有线程,因此每次运行时它的分配模式可能不同,因为线程的调度方式不同。

此外,Linux使用地址随机化,因此如果您多次运行非线程程序,您将最终得到不同的地址。另一方面,GDB禁用该随机化,因此如果您在GDB下运行非线程程序,它每次都应该在同一个地方崩溃。

您可能正在对已失效(例如已删除)的对象调用虚函数。使用where GDB命令查找 您最终无效地址的方式。

此外,不要永远在UNIX上调用您的可执行文件test:这与许多shell脚本将使用的/usr/bin/test冲突。