如何在GDB中查看文件的完整路径?
答
使用info source
命令获取当前堆栈帧的信息。
下面是它的输出的例子:
(gdb) info source Current source file is /build/gtk+2.0-LJ3oCC/gtk+2.0-2.24.30/modules/input/gtkimcontextxim.c Located in /home/sashoalm/Desktop/compile/gtk+2.0-2.24.30/modules/input/gtkimcontextxim.c Contains 1870 lines. Source language is c. Producer is GNU C11 5.3.1 20160225 -mtune=generic -march=i686 -g -g -O2 -O2 -fstack-protector-strong -fPIC -fstack-protector-strong. Compiled with DWARF 2 debugging format. Does not include preprocessor macro info.
答
在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
答
来自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()
这里是使这一切工作步骤:
- 安装pyperclip python库 sudo zypper in python3-pyperclip
- 将上面的脚本保存到一个文件中,比如file-path.py并将其复制到〜/ .gdb与添加以下行
- 更新〜/ .gdbinit: 源〜/ .GDB/file-path.py
- 现在你可以路径和符合
clippath
在gdb复制到剪贴板
并阅读有关GDB Python API的更多信息 - link
此命令显示有关* current *断点的信息,有时需要很长时间才能在特定函数上找到断点。在这种情况下,可以用`jump`强制跳转到该函数。 –
mMontu
2015-04-08 19:06:39