问题标签 [gdb-python]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
18 浏览

gdb - QtCreator 在 GDB 的“附加启动命令”中处理反斜杠

我使用 QtCreator 为 Android 部署和调试应用程序。我正在尝试solib-search-path为 GDB 指定(因为 QtCreator 没有正确设置它以加载共享库)。

当我将这些行添加到 GDB 字段的“其他启动命令”中时:

它工作正常,我的库已加载。但是现在,如果我想让它更加动态并适用于我正在使用的任何项目,我需要从 QtCreator 的%{CurrentProject:BuildPath}变量创建 libsPath ......所以我尝试:

然后,调试器控制台报告(我的共享库不再加载):

知道为什么路径会变得混乱(C:/dev\013obs_sde\build在期待的时候C:/dev/vobs_sde/build)......以及应该如何解决这个问题?

0 投票
2 回答
90 浏览

python - 是否可以生成一个伪类型,以便我可以伪造 gdb 漂亮的打印系统?

我正在用 python 为 gdb 编写一个漂亮的打印机,并且正在慢慢掌握这种方法。试图找到有关该系统如何工作的实际文档以及这些方法的预期结果示例,就像拔牙一样。我在这里和那里找到了一些零碎的东西,但没有什么是包罗万象的。我发现的一些信息是通过反复试验得到的,这进展缓慢。

到目前为止,看起来漂亮的打印机to_string()只允许返回一个字符串(当然),但是children()可以返回一个string或一对stringand value,其中value是 python 值或此处描述的值对象,它是 ac 的包装器/c++ 正在打印的对象。实际上,我曾希望我可以返回一个漂亮的打印机对象并调用它,但可惜,事实并非如此。我可以返回一个字符串,但我希望有效负载元素在 VSCode 之类的 IDE 中可折叠,为此我需要返回一个值对象。与此等效的是Natvis中的合成物品

我有一个作为缓冲区的 c++ 类。原始的,它包含一个字节向量,我需要以可读的方式对其进行处理。

给出我收集到的约束,如果我可以使用伪类型将指针包装在代理值对象中,我可能能够将字节分解为可用的单元。这是我正在谈论的硬编码示例:

在大端机器上放置一个断点return 0;,我希望显示如下内容:

到目前为止,这是我为漂亮的打印机 python 代码得到的:

(我还在学习python以及这个API,所以如果有任何错误,请告诉我。)

倒数第二行yield ???是我坚持的。有任何想法吗?如果这不是这样做的方法,请告诉我另一种方法。

0 投票
1 回答
35 浏览

python - 如何在 gdb 的 python API 中使用第二个 Value 构造函数?

在 gdb 的Values From Inferior 文档中,有第二个构造函数用于在 python 中创建对象。它指出:

功能:Value.__init__ (val, type)

    构造函数的第二种形式gdb.Value返回一个gdb.Value类型type,其中值内容取自 指定的 Python 缓冲区对象val。Python 缓冲区对象中的字节数必须大于或等于类型的大小。

我的问题是,如何创建可以传递给构造函数的缓冲区对象?例如,如果我想创建一个字符串(是的,我知道第一个 Value 构造函数可以做到这一点,但这是一个示例),我编写了以下函数:

但是,当我尝试使用它时,我收到了消息:

我将如何制作一个可以传递给 Value 构造函数的缓冲区对象?我需要做什么来生成一个 Value 对象?

0 投票
0 回答
28 浏览

gdb - GDB,委托给现有的内置漂亮打印机

我有一个包装 a 的结构,std::mapgdb 知道如何进行漂亮的打印。
我想编写一个自定义的漂亮打印机(使用 python),它委托给内部std:::map并且可能显示地图中现有条目的计数(并希望 python 不必为此遍历树)。

编辑:
我当前的包装器打印 ingdb 因为MyMap<unsigned long, std::__cxx11::basic_string<...>> = {std::map with 2 elements = {[0] = "", [5] = "55555"}}
那里有我想删除的间接:
MyMap<...> with 2 elements = {[0] = "", [5] = "55555"}
...只是我剪断通用参数

我当前使用的显示提示也是“数组”而不是“地图”,因为我无法正确委派它。当前的代表团如下所示:

0 投票
0 回答
29 浏览

c++ - gdb:如何进行过滤查询以显示容器中的结构?

目前在 gdb 中,我可以打印包含结构类型的容器的内容,例如 std::list。但是,这种类型非常大,我只需要容器中每个项目中某些选定字段的值。因此,假设我有一个包含大约 100 个字段的结构,并且容器中有 3 个项目并且需要显示该type字段。所以:

会显示很多噪音,而

不适用于std::list,此外,使用 list 我可以轻松地仅显示第一项的值(其他需要大量带有类型转换的意大利面条,字段到达等),而我需要一些东西,比如:

它将像容器打印机通常那样显示每个项目,除了显示的值将仅包含该type字段。

有什么方法可以实现这样的事情,或者有什么方法可以使用脚本提供这样的解决方案?