• Debugging with GDB阅读[5]


    Extending GDB

    详情在http://sources.redhat.com/gdb/current/onlinedocs/gdb.html#Extending-GDB,具体还需要进一步实例应用

    set script-extension off
    All scripts are always evaluated as gdb Command Files.
    set script-extension soft
    The debugger determines the scripting language based on filename extension. If this scripting language is supported, gdb evaluates the script using that language. Otherwise, it evaluates the file as a gdb Command File.
    set script-extension strict
    The debugger determines the scripting language based on filename extension, and evaluates the script using that language. If the language is not supported, then the evaluation fails.
    show script-extension
    Display the current value of the script-extension option.

    23.1 命令序列
    除了breakpoint命令外,支持下面几种情况
    Define: How to define your own commands
    Hooks: Hooks for user-defined commands
    Command Files: How to write scripts of commands to be stored in a file
    Output: Commands for controlled output

    23.1.1 How to define your own commands
    User commands may accept up to 10 arguments separated by whitespace. Arguments are accessed within the user command via $arg0...$arg9.

    define adder
    if $argc == 2
    print $arg0 + $arg1
    end
    if $argc == 3
    print $arg0 + $arg1 + $arg2
    end
    end

    具有如下:
    define commandname
    document commmandname
    dont-repeat
    help user-defined
    show user
    show user commandname
    show max-user-call-depth
    set max-user-call-depth

    23.1.2 User-defined Command Hooks
    You may define hooks, which are a special kind of user-defined command. Whenever you run the command `foo', if the user-defined command `hook-foo' exists, it is executed (with no arguments) before that command.

    A hook may also be defined which is run after the command you executed. Whenever you run the command `foo', if the user-defined command `hookpost-foo' exists, it is executed (with no arguments) after that command. Post-execution hooks may exist simultaneously with pre-execution hooks, for the same command.

    define hook-echo
    echo <<<---
    end

    define hookpost-echo
    echo --->>>\n
    end

    (gdb) echo Hello World
    <<<---Hello World--->>>
    (gdb)

    23.1.3 Command Files
    if
    else
    This command allows to include in your script conditionally executed commands. The if command takes a single argument, which is an expression to evaluate. It is followed by a series of commands that are executed only if the expression is true (its value is nonzero). There can then optionally be an else line, followed by a series of commands that are only executed if the expression was false. The end of the list is marked by a line containing end.

    while
    This command allows to write loops. Its syntax is similar to if: the command takes a single argument, which is an expression to evaluate, and must be followed by the commands to execute, one per line, terminated by an end. These commands are called the body of the loop. The commands in the body of while are executed repeatedly as long as the expression evaluates to true.

    loop_break
    This command exits the while loop in whose body it is included. Execution of the script continues after that whiles end line.

    loop_continue
    This command skips the execution of the rest of the body of commands in the while loop in whose body it is included. Execution branches to the beginning of the while loop, where it evaluates the controlling expression.

    end
    Terminate the block of commands that are the body of if, else, or while flow-control commands.


    23.2 Scripting GDB using Python
    23.2.1 Python Commands
    This feature is available only if gdb was configured using --with-python.

    (gdb) python
    Type python script
    End with a line saying just "end".
    >print 23
    >end
    23

    set python print-stack
    By default, gdb will not print a stack trace when an error occurs in a Python script. This can be controlled using set python print-stack: if on, then Python stack printing is enabled; if off, the default, then Python stack printing is disabled.

    source script-name
    The script name must end with `.py' and gdb must be configured to recognize the script language based on filename extension using the script-extension setting.
    python execfile ("script-name")
    This method is based on the execfile Python built-in function, and thus is always available.

    23.2.2 Python API
    At startup, gdb overrides Python's sys.stdout and sys.stderr to print using gdb's output-paging streams. A Python program which outputs to one of these streams may have its output interrupted by the user (see Screen Size). In this situation, a Python KeyboardInterrupt exception is thrown.
    http://sources.redhat.com/gdb/current/onlinedocs/gdb.html#Basic-Python

    (gdb) python
    >class HelloWorld (gdb.Command):
    > """Greet the whole world."""
    > def __init__ (self):
    > super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_OBSCURE)
    > def invoke (self, args, from_tty):
    > argv = gdb.string_to_argv (args)
    > if len (argv) != 0:
    > raise gdb.GdbError ("hello-world takes no arguments")
    > print "Hello, World!"
    >HelloWorld ()
    >end
    (gdb) hello-world 42
    hello-world takes no arguments
  • 相关阅读:
    [Give a try | Multithreading]The Practical Guide to Multithreading
    [SOLID]The Principles of OOD
    Mixing Native and Managed Types in C++
    [转载]关于大型软件重构的一些想法
    Mixed mode programming is the absolute power of C++/CLI
    Sample: Mixing Unmanaged C++, C++/CLI, and C# code
    添加删除虚函数带来的问题及解决办法
    如何阅读code base的组内讨论的总结
    如何快速定位一个函数的返回点(c/c++ Only)
    DirextX Training笔记
  • 原文地址:https://www.cnblogs.com/moonflow/p/2287273.html
Copyright © 2020-2023  润新知