zoukankan      html  css  js  c++  java
  • gdb自动化,使用python

    相关API列表:

    https://sourceware.org/gdb/onlinedocs/gdb/Python-API.html

    使用python 3

    demo1:  vim mybugreport.py

    import os
    
    class BugReport (gdb.Command):
      """Collect required info for a bug report"""
    
    def__init__(self):
      super(BugReport, self).__init__("bugreport", gdb.COMMAND_USER)
    
    def invoke(self, arg, from_tty):
      pagination = gdb.parameter("pagination")
      if pagination: gdb.execute("set pagination off")
      f = open("/tmp/bugreport.txt", "w")
      f.write(gdb.execute("thread apply all backtrace full", to_string=True))
      f.close()
      os.system("uname -a >> /tmp/bugreport.txt")
      if pagination: gdb.execute("set pagination on")
    
     BugReport()
    

      demo2: 

    def invoke(self, arg, from_tty):
      pagination = gdb.execute("show pagination", to_string=True).endswith("on.
    ")
      if pagination: gdb.execute("set pagination off")
      gdb.execute('thread apply all backtrace full')
      import os
      os.system('uname -a')
      if pagination: gdb.execute("set pagination on")
    

      other: https://sourceware.org/gdb/wiki/PythonGdbTutorial

    Tom Tromey wrote a PythonGdb tutorial which helps make the [[http://sourceware.org/gdb/onlinedocs/gdb/Python.html|official Python binding docs]] much more accessible:
    
     1. [[http://tromey.com/blog/?p=494|Installing a Python-enabled debugger]]<<BR>>We’ll start at the very beginning: checking it out, building it, and then “hello, world”.
     1. [[http://tromey.com/blog/?p=501|Writing a new gdb command]]<<BR>>I'll show you how to implement a new command to save breakpoints to a file.
     1. [[http://tromey.com/blog/?p=515|gdb convenience functions]]<<BR>>Now we’ll see how to write new functions, so your Python code can be called during expression evaluation.
     1. [[http://tromey.com/blog/?p=520|Parameters, and extending require]]<<BR>>Parameters are a nice feature when you are polishing your gdb extensions for more general use. Having Python extensions which are themselves extensible - like require - is an emerging theme of python-gdb.
     1. [[http://tromey.com/blog/?p=522|The filtering backtrace]]<<BR>>Now let’s do something really useful. We’ve reimplemented backtrace, entirely in Python.  And, in so doing, we’ve added some functionality, namely filtering and reverse backtraces
     1. [[http://tromey.com/blog/?p=535|Auto-loading Python code]]<<BR>>Suppose someone writes a new filter - it would be nice to get it without having to edit anything. Naturally, we provide an automatic mechanism for loading code.
     1. [[http://tromey.com/blog/?p=524|Pretty printing, part 1]]<<BR>>You can register a pretty-printer class by matching the name of a type; any time gdb tries to print a value whose type matches that regular expression, your printer will be used instead.
     1. [[http://tromey.com/blog/?p=546|Pretty printing, part 2]]<<BR>>There are a few additions which are helpful with more complex data types.  This post will explain the other printer methods used by gdb, and will explain how pretty-printing interacts with MI, the gdb machine interface.
     1. [[http://tromey.com/blog/?p=548|Scripting gdb]]<<BR>>In this post I want to look at gdb from a different angle: as a library.  I’ve long thought it would be pretty useful to be able to use gdb as a kind of scriptable tool for messing around with running programs, or even just symbol tables and debug info; the Python work enables this.
     1. [[http://tromey.com/blog/?p=550|Wacky stuff]]<<BR>>What could be flashier than a GUI?
     1. [[http://tromey.com/blog/?p=552|The End]]<<BR>>What next? Now is an exciting time to be working on gdb.  There are a number of very interesting projects underway.
     1. [[http://tromey.com/blog/?p=696|Events]]<<BR>>Gdb's event system.
     1. [[http://tromey.com/blog/?p=698|Breakpoints]]<<BR>>API for handling breakpoints.
     1. [[http://www.cinsk.org/articles/gdb3.en.html|Adding new GDB Commands using Python]]<<BR>>Adding some useful commands (i.e. hexdump, iconv) to GDB
  • 相关阅读:
    反射
    如何通过反射调用对象的方法?
    简述一下面向对象的”六原则一法则”。
    用Java写一个单例类。
    什么是UML?
    UML中有哪些常用的图?
    用Java写一个折半查找。
    两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
    构造器(constructor)是否可被重写(override)?
    用最有效率的方法计算2乘以8?
  • 原文地址:https://www.cnblogs.com/zhang-pengcheng/p/14532225.html
Copyright © 2011-2022 走看看