【发布时间】:2013-02-11 10:58:28
【问题描述】:
在遇到 seg 错误后,我使用了 gdb a.out core 命令。之后我使用了回溯(bt),这就是 gdb 告诉我的
警告:核心文件可能与指定的可执行文件不匹配。
警告:读取 0xfbe8 处的共享库列表条目时出错
警告:读取 0x74c085ff 处的共享库列表条目时出错
核心由“family.out smith.ged”生成。
程序以信号 11 终止,分段错误。
(poundsign)0 0x08086a6 in count_records ()
(gdb) bt
(poundsign)0 0x080486a6 in count_records()
(poundsign)1 0x08048906 in __libc_csu_init ()
(磅符号)2 0xbf85624c in ??()
(磅符号)3 0xbf856310 在 ?? ()
回溯停止:此帧内部的前一帧(损坏的堆栈?)
有人可以告诉我一些可能导致此段错误的原因吗?通常 gdb 会给我程序中的行号,但这次没有。
【问题讨论】:
-
很有可能您访问了不属于您的内存。除此之外,可能还需要看代码!
-
gdb 输出表明您正在查看由不同二进制文件生成的核心文件。要调试您的应用程序,您可以在 gdb 中运行它(使用“gdb binary”,然后使用“run”命令),或者使用类似 valgrind 的东西。
-
绝对使用 valgrind 处理段错误。
-
你用调试信息编译了吗(
-g)? -
核心转储完成后您是否重新编译过?这将导致可执行文件不匹配。如果是这样,请删除核心并重新运行以获得匹配的核心。
标签: c gcc segmentation-fault