这是我核心档案的一部分:
[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崩溃或程序在尝试读/写该地址时崩溃?
该地址没有可执行代码
另一件事是它每次崩溃都会给出一个不同的地址。
答案 0 :(得分:3)
这是否意味着我的程序崩溃在0x001cd1a6
是
该地址没有可执行代码。
嗯,这肯定会导致崩溃(由于非法指令)。
另一件事是它每次崩溃都会给出不同的地址。
您的程序有线程,因此每次运行时它的分配模式可能不同,因为线程的调度方式不同。
此外,Linux使用地址随机化,因此如果您多次运行非线程程序,您将最终得到不同的地址。另一方面,GDB禁用该随机化,因此如果您在GDB下运行非线程程序,它每次都应该在同一个地方崩溃。
您可能正在对已失效(例如已删除)的对象调用虚函数。使用where
GDB命令查找 您最终无效地址的方式。
此外,不要永远在UNIX上调用您的可执行文件test
:这与许多shell脚本将使用的/usr/bin/test
冲突。