核心文件的地址是什么?

问题描述 投票:0回答:1

这是我的核心文件的一部分:

[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 处崩溃,或者程序在尝试读/写该地址时崩溃?
该地址没有可执行代码。
另一件事是它每次崩溃时都会给出不同的地址。

linux gdb coredump
1个回答
3
投票

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

是的。

该地址没有可执行代码。

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

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

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

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

您可能在已失效(例如删除)的对象上调用虚拟函数。使用

where
GDB 命令找出如何最终得到无效地址。

另外,永远不要在 UNIX 上调用可执行文件 test

:这与许多 shell 脚本都会使用的 
/usr/bin/test
 冲突。

© www.soinside.com 2019 - 2024. All rights reserved.