如何让GDB调试链接程序

问题描述:

例如,如果我们做如何让GDB调试链接程序

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调试连接程序而不是获取其绝对路径?

+0

相关:[与非路径名的gdb启动应用程序(http://*.com/questions/38957892/launch-application-in-gdb-with-non-path-name) –

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

不,我们没有看到这个。我们看到GDB执行realpath来解析程序,而lldb没有,但他们都是调试完全一样的程序。

+0

如果在可执行我们检查可执行文件的路径,它们是一样的吗? –

+0

@JoeC取决于你的意思是“检查可执行文件的路径”。 –

也许你可以使用硬链接?

这样,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. 

所以,玩弄更近的版本。