Make GDB print control flow of functions as they are called

前端 未结 5 720
广开言路
广开言路 2020-12-14 03:09

How do I make gdb print functions of interest as they are called, indented according to how deep in the stack they are?

I want to be able to say something like (made

5条回答
  •  感动是毒
    2020-12-14 03:37

    In your case I would turn to the define command in gdb, which allows you to define a function, which can take up to 10 arguments.

    You can pass in the names of functions to "trace" as arguments to the function you define, or record them all in the function itself. I'd do something like the following

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

    Arguments to a user-defined function in gdb are referenced as $arg0-$arg9. Alternatively, you could just record every function you wanted to trace in the function, instead of using $arg0-9.

    Note: this will not indent as to depth in the stack trace, but will print the stack trace every time the function is called. I find this approach more useful than strace etc... because it will log any function you want, system, library, local, or otherwise.

提交回复
热议问题