【问题标题】:how to make gdb debug a linked program如何使gdb调试链接程序
【发布时间】:2017-05-04 05:55:52
【问题描述】:

例如,如果我们这样做

mkdir a
mkdir a/b
mkdir a/b/c
mkdir a/b/c/d
ln /bin/ls -s a/b/c/d/myls
ln a -s as
gdb as/b/c/d/myls
...
(gdb) r
Starting program: <mypath>/a/b/c/d/myls
^D
lldb as/b/c/d/myls
(lldb) r
Process 56636 launched: '<mypath>/as/b/c/d/myls' (x86_64)

我们可以看到 gdb 在规范程序上进行调试,而 lldb 在链接程序上进行调试。我们如何让 gdb 调试链接的程序而不获取其绝对路径?

【问题讨论】:

标签: gdb lldb


【解决方案1】:

我们可以看到 gdb 在规范程序上进行调试,而 lldb 在链接程序上进行调试。

不,我们没有看到这一点。我们看到 GDB 执行realpath 来解析程序,而lldb 没有,但他们调试完全相同程序。

【讨论】:

  • 如果在可执行文件中我们检查可执行文件的路径,它们是否相同?
  • @JoeC 取决于“检查可执行文件的路径”的含义。
【解决方案2】:

也许您可以改用硬链接?

这样,gdb 将始终引用您要查找的内容。

您还可以使用不同版本的 gdb。似乎 7.11 版提供了您想要的。

看这里:

~/tmp/link] stat hello
  File: ‘hello’ -> ‘../hello’

这是您在 7.12 版中获得的内容

Type "apropos word" to search for commands related to "word"...
Reading symbols from ./link/hello...(no debugging symbols found)...done.

而对于较旧的 gdb,您会得到

For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from full_path/tmp/hello...(no debugging symbols found)...done.

所以,试试更新的版本吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2012-08-11
    • 2011-01-10
    • 2017-11-05
    相关资源
    最近更新 更多