【问题标题】:gdb symbols loaded but no symbols shown for seg fault [duplicate]已加载 gdb 符号,但未显示段错误的符号 [重复]
【发布时间】:2020-10-04 10:20:40
【问题描述】:

所以我在设置 ulimit 后有我的核心转储:(ulimit -c unlimited)

核心转储来自另一个遇到问题的系统。

我已将核心复制到我的开发系统中进行检查。

我进入 gdb:

$ gdb -c core
...
Core was generated by `./ovcc'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007fedd95678a9 in ?? ()
[Current thread is 1 (LWP 15155)]
(gdb) symbol-file ./ovcc
Reading symbols from ./ovcc...
(gdb) bt
#0  0x00007fedd95678a9 in ?? ()
#1  0x0000000000000002 in ?? ()
#2  0x000055e01cd5e7e0 in ?? ()
#3  0x00007fedd21e9e00 in ?? ()
#4  0x0000000000000201 in ?? ()
#5  0x000055e01cd5e7e0 in ?? ()
#6  0x0000000000000201 in ?? ()
#7  0x0000000000000000 in ?? ()
(gdb)

我检查了编译和链接命令,它们都有“-g”,我可以使用 codium 调试器直观地逐步执行程序!

那么为什么我看不到可执行文件崩溃的位置?

我错过了什么?

问题是核心是在另一个系统上创建的吗?

【问题讨论】:

    标签: linux gdb symbols coredump


    【解决方案1】:

    问题是核心是在另一个系统上创建的吗?

    是的,没错。

    请参阅this answer 了解可能的解决方案。

    更新:

    那么这是否意味着我只能在程序构建和崩溃的系统上调试程序?

    确实不是正确的是,您只能在二进制文件同时构建和崩溃的系统上调试内核——我每次调试来自不同系统的内核转储一天,就我而言,构建主机、程序崩溃的主机和我调试的主机都是分开的。

    我刚刚注意到的一件事:您加载coregdb -c core 后跟symbol-file 的方式不适用于 PIE 可执行文件(至少在使用 GDB 10.0 时)——这可能是GDB。

    加载核心的“常规”方式是:

    gdb ./ovcc core
    

    看看这是否能给你带来更好的结果。 (您仍然需要安排匹配的 DSO,因为链接的答案显示了如何做。)

    【讨论】:

    • 好的,所以我远程访问了另一个系统,并使用 gdb(在该系统上)使用相同的命令检查了核心,结果是相同的。那么这是否意味着我只能在程序构建和崩溃的系统上调试程序?
    • @WalterZAMBOTTI 我更新了答案。
    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多