gpt4 book ai didi

python - 如何从 gdb-python 方法中调用 C 函数

转载 作者:行者123 更新时间:2023-11-28 17:10:42 25 4
gpt4 key购买 nike

我想在 gdb 中创建一个 python pretty-print 。我正在尝试调试的程序中有一个隐藏的数据类型 xyzHandle。我可以使用 C 函数从该句柄中提取一些信息;我可以在 gdb 调试器中调用它。例如:

xyzHandle object1 = api_get_first_object();

(gdb) print (char *)xyz_get_string(1, object1)

我知道我可以创建一个像“pn”这样的 gdb 命令并使用它;但我想使用 (gdb) 的内置 python 创建一个 pretty-print ,如果它看到 'xyzHandle',它将调用 'xyz_get_string(1, object1)' 并只打印返回的字符串。这样在 (gdb) 中我可以简单地输入 'print object1' 。

我读过如何创建一个简单的 gdb-python pretty_printer ,但我不知道如何调用驻留在我正在从 python 调试的程序中的函数。

这是我用于 xyzHandle 对象的 pretty-print 示例。

# 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())

最佳答案

create a pretty-printer that if it sees 'xyzHandle' it will call 'xyz_get_string(1, object1)' and just print the returned string

这通常是个坏主意:您的 pretty-print 将在“实时”过程中工作,但会在事后(核心 文件)调试中出错。如果您在纯 Python 中复制 xyz_get_string 的功能,通常情况会更好。

I don't know how to call a function that resides in the program I'm debugging from python.

您可以为此使用 gdb.parse_and_eval

关于python - 如何从 gdb-python 方法中调用 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47756251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com