gpt4 book ai didi

gdb - 如何进行 GDB 回溯仅显示函数名称而不显示其他任何内容?

转载 作者:行者123 更新时间:2023-12-04 10:24:33 26 4
gpt4 key购买 nike

我一直在对复杂的代码进行大量分析,为了解释事情是如何工作的,我经常想回溯到一些只包含函数名称的兴趣点。

但是,当我这样做时:

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

?

测试程序:

主文件
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完成工作的配置我也有兴趣了解它们。

在 Ubuntu 19.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()

GitHub upstream .

现在我可以:
btf

这给了我想要的输出。

关于gdb - 如何进行 GDB 回溯仅显示函数名称而不显示其他任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60680813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com