我有一个奇怪的问题。当我调试我的代码时,我无法查看其中一个共享库中的任何函数的源代码。当我在函数上设置断点时,我点击了断点,但是得到了以下输出
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
构建,并包含调试符号。
答案 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)。