当前位置:  开发笔记 > 编程语言 > 正文

在调用函数时使GDB打印控制流程

如何解决《在调用函数时使GDB打印控制流程》经验,为你挑选了1个好方法。

如何调用感兴趣的gdb打印函数,根据堆栈的深度缩进?

我希望能够说出(制作):

(gdb) trace Foo* Bar* printf

并让gdb打印所有以Foo或Bar开头的函数,因为它们被调用.有点像gnu cflow,除了使用调试符号和仅实际调用的打印函数,而不是所有可能的调用流.

无法帮助的工具包括cachegrind,callgrind和oprofile,它们最常调用函数的结果.我需要保留的调用顺序.

通配符(或等效的)是必不可少的,因为有很多Foo和Bar函数.虽然我愿意完全记录所有功能.或者,也许告诉gdb记录特定库中的所有函数.

某些GDB向导必须有一个用于此常见作业的脚本!



1> alesplin..:

在你的情况下,我将转向definegdb中的命令,它允许您定义一个函数,该函数最多可以包含10个参数.

您可以将函数名称传递给"trace"作为您定义的函数的参数,或者将它们全部记录在函数本身中.我会做类似以下的事情

define functiontrace
if $arg0
    break $arg0
    commands
        where
        continue
        end
    end

if $arg1
...

gdb中用户定义函数的参数引用为$ arg0- $ arg9.或者,您可以在函数中记录要跟踪的每个函数,而不是使用$ arg0-9.

注意:这不会缩进堆栈跟踪中的深度,但每次调用函数时都会打印堆栈跟踪.我发现这种方法比strace等更有用...因为它会记录你想要的任何函数,系统,库,本地或其他.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有