如何执行只显示函数名而不显示其他内容的GDB回溯跟踪?

如何执行只显示函数名而不显示其他内容的GDB回溯跟踪?,gdb,Gdb,我一直在做一系列复杂代码的分析,为了解释如何工作,我经常想回溯到只包含函数名的感兴趣点 然而,当我这样做时: bt 它添加了许多额外的信息,如地址和参数,我必须手动删除这些信息: #0 f2 (i=0) at main.c:1 #1 0x0000555555555155 in f1 (i=1) at main.c:6 #2 0x0000555555555177 in main (argc=1, argv=0x7fffffffc178) at main.c:10 是否有一种方法只打印函数

我一直在做一系列复杂代码的分析,为了解释如何工作,我经常想回溯到只包含函数名的感兴趣点

然而,当我这样做时:

bt
它添加了许多额外的信息,如地址和参数,我必须手动删除这些信息:

#0  f2 (i=0) at main.c:1
#1  0x0000555555555155 in f1 (i=1) at main.c:6
#2  0x0000555555555177 in main (argc=1, argv=0x7fffffffc178) at main.c:10
是否有一种方法只打印函数名而不打印其他内容,如:

f2
f1
main
?

测试程序:

main.c

int f2(int i) {
    return i + 1;
}

int f1(int i) {
    return f2(i) + 1;
}

int main(int argc, char *argv[]) {
    return f1(argc);
}
编译并运行:

g++ -ggdb3 -O0 -std=c++11 -Wall -Wextra -pedantic -o main.out main.c
gdb -nh -batch -q -ex 'b f2' -ex r -ex bt main.out
对于这个用例,我最感兴趣的是单个使用选项,但是如果有任何
set
configures可以完成任务,我也有兴趣了解它们


在Ubuntu19.10、GDB 8.3中测试。

由于我无法轻松找到一个选项,我最终为它破解了一个GDB Python脚本:

class BtFuncOnly(gdb.Command):
    """Backtrace with function names only
"""
    def __init__(self):
        super(self.__class__, self).__init__('btf', gdb.COMMAND_FILES)
    def invoke(self, argument, from_tty):
        frame = gdb.selected_frame()
        while frame is not None:
            gdb.write('{}\n'.format(frame.name()))
            frame = frame.older()
BtFuncOnly()

现在我可以:

btf
这给了我想要的输出