Python 中的 LLDB 便捷函数

问题描述 投票:0回答:1

是否可以用Python编写一个LLDB扩展,它提供了一个可以在LLDB命令行表达式中使用的函数,类似于GDB的this

我搜索了 LLDB Python API 文档,找到了如何添加 命令类型格式化程序合成子提供程序。我正在使用这些工具创建脚本(使用底层代码在LLDB和GDB之间可移植)。我们有一个在 GDB 中使用的便利函数,并且正在考虑编写更多内容,但如果在 LLDB 中不可能,我们可能会使用某种命令来代替。

python gdb lldb
1个回答
0
投票

这些伪函数中的许多功能(例如在包含堆栈中查找元素)与表达式求值并没有真正的密切关系。它们位于 gdb 的

print
中,因为在 gdb 中,这更像是一个通用的“告诉我有关调试者的信息”命令。在 lldb 中,这些函数提供的一些报告在 lldb 中作为单独的命令更合适。

lldb 的

print
试图表达“如果这段代码在这个调试对象中运行,会发生什么”。 lldb 的表达式求值器尝试尽可能接近语言精确的嵌入式编译器,“就像代码在当前帧中运行一样”。所以它对于引入非语言特性是非常有选择性的。

注意,如果您需要在 lldb 表达式中进行一些特殊的测试或访问方法,您可以向表达式求值器引入您自己的函数。命令:

(lldb) expr bool $_isvoid(void *ptr) { return ptr == nullptr; }

将创建一个名为

$_isvoid
的函数,您可以在其他表达式中调用它。但是,这不会具有 gdb 的功能,即无论目标是否正在运行都可以调用它。它将在被调试者的内存中创建一个真正的函数并实际调用它。

© www.soinside.com 2019 - 2024. All rights reserved.