gpt4 book ai didi

c++ - 跳过回溯中最内层的帧

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:50 24 4
gpt4 key购买 nike

我想在 gdb 中创建回溯(在脚本中)。命令 bt 2 只打印最里面的 2 个帧,而 bt -2 只打印最外面的 2 个帧。

我想做的是跳过最里面的 2 个框架,并显示所有外部框架。我试过了

up 2
bt

(和类似的up-silentlyframeselect-frame),但是它不影响的输出bt。明确地说,我想去掉此输出中的第一行:

#0  0x0000003167e0f33e in waitpid () from /lib64/libpthread.so.0
#1 0x00007f2779835de8 in print_trace() () at /path/to/MyAnalysis.cxx:385
#2 0x00007f2779836ec9 in MyAnalysis::getHistHolder(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) () at /path/to/MyAnalysis.cxx:409
#3 0x00007f27798374aa in MyAnalysis::execute() () at /path/to/MyAnalysis.cxx:599
#4 0x00007f2783a9670f in EL::Worker::algsExecute() () from /blah/lib/libEventLoop.so
...

有什么办法吗?

调用 return 两次似乎有效,但随后应用程序处于无效状态,因此我无法使用它。

最佳答案

您对“bt”的论点取决于当前存在的帧数。也许这也可以直接在 gdb 中完成(不确定),但是这个 python 脚本正是这样做的:

import gdb

class TopBt (gdb.Command):
""" tbt n Shows backtrace for top n frames """

def __init__ (self):
super(TopBt, self).__init__ ("tbt", gdb.COMMAND_DATA)

def framecount():
n = 0
f = gdb.newest_frame()
while f:
n = n + 1
f = f.older()
return n

def invoke (self, arg, from_tty):
top = int(arg[0])
btarg = -(TopBt.framecount() - top)
if btarg < 0:
gdb.execute("bt " + str(btarg))
TopBt()

将其保存到某个文件 (tbt.py) 中,在 gdb 中获取它(来源 tbt.py)。现在你有了新命令 tbt。 tbt N 将打印除前 N 帧以外的所有帧的回溯。

关于c++ - 跳过回溯中最内层的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991943/

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