【发布时间】:2017-12-11 15:34:38
【问题描述】:
我想在 gdb 中创建一个 python 漂亮的打印机。我正在尝试调试的程序中有一个隐藏的数据类型 xyzHandle。我可以使用 C 函数从该句柄中提取一些信息;我可以在 gdb 调试器中调用它。例如:
xyzHandle object1 = api_get_first_object();
(gdb) print (char *)xyz_get_string(1, object1)
我知道我可以创建一个像“pn”这样的 gdb 命令并使用它;但我想使用(gdb)的内置python来创建一个漂亮的打印机,如果它看到'xyzHandle',它将调用'xyz_get_string(1,object1)'并打印返回的字符串。这样在 (gdb) 中我可以简单地输入 'print object1' 。
我已经了解如何创建一个简单的 gdb-python pretty_printer ,但我不知道如何调用驻留在我从 python 调试的程序中的函数。
这是我用于 xyzHandle 对象的漂亮打印机示例。
# To load this into your gdb session
#
# (gdb) python execfile ("script-name")
#
import gdb.printing
class xyzHandlePrinter:
"""Print an xyzHandle object"""
def __init__(self, val):
self.val = val
def to_string(self):
return ( str( ???how-do-I-call xyz_get_str???) )
def build_pretty_printer():
pp = gdb.printing.RegexpCollectionPrettyPrinter("XYZ Library")
pp.add_printer('xyzHandle Printer', '^xyzHandle', xyzHandlePrinter)
return pp
gdb.printing.register_pretty_printer(
gdb.current_objfile(),
build_pretty_printer())
【问题讨论】: