这是我核心文件的一部分:
[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 处崩溃或程序在尝试读取/写入该地址时崩溃?
该地址没有可执行代码。
另一件事是它每次崩溃时都会提供不同的地址。
最佳答案
Does it mean my program crashes at 0x001cd1a6
是的。
There is no executable code at that address.
嗯,那肯定会导致崩溃(由于非法指令)。
Another thing is it gives a different address every time it crashes.
您的程序有线程,因此它的分配模式可能在每次运行时都不同,因为线程的调度方式不同。
此外,Linux 使用地址随机化,因此即使多次运行非线程程序,您最终也会得到不同的地址。另一方面,GDB 禁用了随机化,因此如果您在 GDB 下运行非线程程序,它应该每次都在同一个地方崩溃。
您可能正在对已失效(例如已删除)的对象调用虚函数。使用 where
GDB 命令找出如何您最终到达无效地址。
此外,不要永远在 UNIX 上调用您的可执行文件 test
:这与 /usr/bin/test
冲突,许多 shell脚本将使用。
关于linux - 核心文件中的地址是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773420/