gdb没有显示源文件

时间:2014-08-12 13:45:59

标签: gcc gdb

我有一个奇怪的问题。当我调试我的代码时,我无法查看其中一个共享库中的任何函数的源代码。当我在函数上设置断点时,我点击了断点,但是得到了以下输出

Breakpoint 1, omx_isend (ep=0xd10120, buffer=0x7fffffffd1d0,
length=70, dest_endpoint=..., match_info=1311768467139281697,
context=0x0, requestp=0x7fffffffd160)
     at <command-line>:1027

1027    <command-line>: No such file or directory

如果我在gdb中运行bt,我会看到以下内容

omx_isend (ep=0xd10120, buffer=0x7fffffffd1d0, length=70, dest_endpoint=..., match_info=1311768467139281697, context=0x0,
requestp=0x7fffffffd160) at <command-line>:1027

我不明白为什么而不是它显示的源文件名<command-line>。 共享库使用-g构建,并包含调试符号。

1 个答案:

答案 0 :(得分:2)

  

我不明白为什么而不是它显示的源文件名<command-line>.

正如Jonathan Wakely所说,这是因为gcc的输入来自管道。类似的东西:

sed -e 's/foo/bar/' foo.c | gcc -g -o bar.o -xc -
  

有没有办法告诉gdb在哪里找到哪个函数?

您已经知道这是哪个功能:omx_isend。大概你想告诉gdb这个函数来自某个文件,例如foo.c

我不相信在GDB中有办法做到这一点。您最好的选择是调整Makefile。而不是上面的sed,请执行以下操作:

sed -e 's/foo/bar/' foo.c > foo-subst.c && gcc -g -o bar.o foo-subst.c

然后GDB将正常工作(TM)。