How to grep on gdb print

前端 未结 3 1439
灰色年华
灰色年华 2021-02-07 22:31

Is there a way to grep on the output of print command in gdb? In my case, I am debugging a core dump using gdb and the object I am debugging contains hell lots of elements. I am

3条回答
  •  梦毁少年i
    2021-02-07 23:09

    The simplest way is to exploit gdb python. One-liner:

    gdb λ py ["attribute" in line and print(line) for line in gdb.execute("p *this", to_string=True).splitlines()]

    Assuming you have enabled history of commands, you can type this just once, and later then press Ctrl+R b.exec to pull it out of history. Next simply change attribute and *this per your requirements.


    You can also make this as simple as this:

    gdb λ grep_cmd "p *this" attribute

    For that just add the following to your .gdbinit file:

    py
    class GrepCmd (gdb.Command):
        """Execute command, but only show lines matching the pattern
        Usage: grep_cmd   """
    
        def __init__ (_):
            super ().__init__ ("grep_cmd", gdb.COMMAND_STATUS)
    
        def invoke (_, args_raw, __):
            args = gdb.string_to_argv(args_raw)
            if len(args) != 2:
                print("Wrong parameters number. Usage: grep_cmd  ")
            else:
                for line in gdb.execute(args[0], to_string=True).splitlines():
                    if args[1] in line:
                        print(line)
    
    GrepCmd() # required to get it registered
    end
    

提交回复
热议问题