首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从gdb-python方法中调用C函数

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

Stack Overflow用户
提问于 2017-12-11 15:34:38
回答 1查看 1.1K关注 0票数 5

我想在gdb中创建一个python漂亮的打印机。在我试图调试的程序中有一个隐藏的数据类型xyzHandle。我可以使用C函数从这个句柄中提取一些信息;我可以在gdb调试器中调用这个函数。例如:

代码语言:javascript
复制
xyzHandle object1 = api_get_first_object();

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

我知道我可以创建类似于'pn‘的gdb命令并使用它;但是我想使用内置python (gdb)来创建一个漂亮的打印机,如果它看到'xyzHandle’,它将调用'xyz_get_string(1,object1)‘,然后只打印返回的字符串。这样(gdb)我就可以简单地键入'print object1‘。

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

这是我的xyzHandle对象的漂亮打印机示例。

代码语言:javascript
复制
# 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())
EN

回答 1

Stack Overflow用户

发布于 2017-12-11 20:25:18

创建一个漂亮的打印机,如果它看到'xyzHandle‘,它将调用'xyz_get_string(1,object1)’,然后打印返回的字符串。

这通常是个坏主意:您漂亮的打印机将在“活动”进程上工作,但在死后(core文件)调试时会出错。如果您在纯Python中复制xyz_get_string的功能,通常情况会更好。

我不知道如何调用驻留在我从python调试的程序中的函数。

为此您可以使用gdb.parse_and_eval

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47756251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档