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

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

最佳答案

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/

相关文章:

gdb - 在我的 Mac 上的 gdb 7.6 上运行 make 时出错

php - 如何解析由 php 中 json_enocoded 的 url 接收的 json 数据

c++ - Cygwin GDB 在尝试启动程序时出现错误 193

c - 显示按状态过滤的进程的系统调用

linux - 在 linux mint 64 位中编译 aflex

linux - NOOBS 已安装,但无法正常启动,出现内核紧急错误代码 0x00000004”

performance - 随着时间的推移,GDB 变得越来越慢

java - 支持 Reset() 或 MarkSupported() 的 SocketInputStream 和 InputStream

java - 在eclipse中创建java应用程序jar文件

python - ImportError : libcudart. so.7.0: 无法打开共享对象文件: 没有那个文件或目录