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