当我在gdb中停在一个断点时,它只显示文件名filename.cpp。如何查看此文件的完整路径名?
使用info source
命令获取当前堆栈帧的信息。
以下是其输出示例:
(gdb) info source 当前源文件为 /build/gtk+2.0-LJ3oCC/gtk+2.0-2.24.30/modules/input/gtkimcontextxim.c 位于 /home/sashoalm/Desktop/compile/gtk+2.0-2.24.30/modules/input/gtkimcontextxim.c 包含1870行。 源语言为c。 生产者是GNU C11 5.3.1 20160225 -mtune=generic -march=i686 -g -g -O2 -O2 -fstack-protector-strong -fPIC -fstack-protector-strong。 使用DWARF 2调试格式编译。 不包含预处理器宏信息。
Ciro Santill的回答非常好。然而,这个脚本需要进行一些小的修改才能在我的gdb 8.0.1上运行。
我还将其更改为将文本复制到剪贴板中,这样我就可以立即在vim中使用它了。它与file_line.vim插件很好地配合使用。以下是脚本生成的剪贴板内容示例:
/home/ops1/projects/test01/main.cpp:5
import pyperclip
class Clippath (gdb.Command):
"""print absolute path"""
def __init__(self):
super(Clippath, self).__init__("clippath", gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
symtabline = gdb.selected_frame().find_sal()
pyperclip.copy(symtabline.symtab.fullname() + ":" + str(symtabline.line))
Clippath()
clippath
命令将路径和行号复制到剪贴板中在Python脚本编写中
如果您想学习Python脚本编写,或者只想看到完整路径而没有其他内容:
class Curpath(gdb.Command):
"""
Print absolute path of the current file.
"""
def __init__(self):
super().__init__('curpath', gdb.COMMAND_FILES)
def invoke(self, argument, from_tty):
gdb.write(gdb.selected_frame().find_sal().symtab.fullname() + os.linesep)
Curpath()
使用方法:
curpath
filename-display
来控制GDB中文件名的显示方式。要在GDB会话开始时显示绝对文件名,请使用以下命令:set filename-display absolute
jump <function_name>
强制跳转到该函数可能会很有用。 - mMontu