问题标签 [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 投票
4 回答
24759 浏览

unit-testing - 如何编写 gdb 脚本(使用 python)?示例添加断点,运行,我们打的是什么断点?

我正在尝试使用 gdb 创建一个小单元测试,用于由OpenOCD控制的嵌入式 mcu (这使我可以通过 gdb 服务器控制我的目标)。

所以我想用gdb的一些脚本来自动化这个。

我想为 gdb 编写某种或多或少的脚本:

  1. 添加几个断点
  2. 启动程序
  3. 当我们停止时,它在哪里停止(获取帧信息)
  4. 辞职。

有任何想法吗?

关于如何在 python gdb 脚本中执行此操作的示例会很好。

谢谢约翰


注意

假设我们有这个基本结构,或多或少进入 test_failed() 或 test_success() 取决于函数 start_test() 返回的内容。

在 gdb 中手动执行此操作非常困难,

因此,我尝试的下一步是将这些 gdb 命令添加到 gdb 启动脚本中,该脚本或多或少看起来像这样。

并开始

而这种作品,但它不是很好。我如何使用 gdb 似乎支持的“新的和酷的”python 脚本来做到这一点。

0 投票
5 回答
45401 浏览

c++ - 如何在 Eclipse CDT 中为 C++ STL 对象启用 gdb 漂亮打印?

我正在尝试在 eclipse cdt 中为 STL 对象添加漂亮的打印。我尝试按照此处描述的步骤进行操作:

http://sourceware.org/gdb/wiki/STLSupport

我检查了python文件夹,但似乎无法完成...

我创建了一个 gdbinit 并选择了我的调试配置,但是每当我尝试开始调试时,我都会收到以下错误:

如果我尝试在 python shell 中执行 gdbinit 的内容,我会收到以下错误:

似乎我没有这样的模块......我对 Python 没有任何线索,所以我什至不知道 Python 中的“模块”是什么......

有人可以帮我吗?能够看到真实的调试信息对我来说非常重要,或者这样说很有用。或者以某种方式我什至可以从控制台调试并从 gdb 获得很好的输出,因为如果我打印一个字符串,例如我得到无用的输出......

问候,亚历克斯

0 投票
2 回答
784 浏览

debugging - CUDA/PyCUDA:诊断在 cuda-gdb 下消失的启动失败

任何人都知道在 cuda-gdb 下运行时消失的内核启动失败的可能调查途径吗?内存分配在规范范围内,每次在同一内核的同一运行中启动都会失败,并且(到目前为止)它在调试器中没有失败。

哦,伟大的大师,现在呢?

0 投票
1 回答
295 浏览

gdb - 添加源检测代码 - 源到源编译器是正确的方法吗?如何建造一个?

我正在做一个项目,我需要跟踪任何给定应用程序代码中特定变量集的更改,以对内存访问模式进行建模。

我主要想到了两种方法,请给出您的想法。

  1. 我最初的想法是像许多像 gprof 这样的分析器那样做,我在编译之前在目标应用程序代码中添加检测代码,并分析此检测代码生成的日志以获取所需的信息。

为此,我只能想到某种源到源编译器,它解析给定的代码并将检测代码(相同语言的源代码编译器)注入应用程序,我以后可以编译和运行以获取所需的日志。

这看起来是对的还是我过度设计了?如果没有,是否有工具可以让我(相对)轻松地构建源代码编译器?

  1. 我读到了 GDB 对 python 的支持,所以,我在想是否可以编写一个 python 脚本来获取一组变量作为配置文件,并设置观察点并在每次写入被监视的变量时记录。我尝试使用此 GDB 功能,但在我的 Ubuntu 机器上,它现在似乎无法正常工作。 http://sourceware.org/gdb/onlinedocs/gdb/Python.html#Python

而且,应用程序的语言将是 nesC(我猜 nesC 在编译过程中会转换为 C)(并且应用程序将像我计算机上的本机应用程序一样在 TOSSIM 上运行)。

0 投票
1 回答
877 浏览

python - gdb python:谁能解释我如何使用这篇文章中写的这个脚本?

如何为ac代码..?可能吗..?我读了这篇文章。我也想做类似的事情,但我无法在链接 GDB-Python 脚本中使用给定的更新脚本:遍历 C/C++ 结构字段的任何示例

我按照以下步骤进行测试:我的源代码名称是:test.c 和 pretty.py

gcc -g test.c

gdb test

(gdb) source pretty.py

(gdb) run

(gdb) print <stcruct object>

如何使用这个脚本?

0 投票
1 回答
866 浏览

python - 核心转储:从核心转储中提取所有全局变量、数据结构和子结构

如何使用 gdb-python 从 C 代码崩溃后生成的核心转储中提取所有全局变量、数据结构和子结构(带有地址、类型和值)。?

0 投票
2 回答
3321 浏览

python - gdb python:如何将 gdb 命令的输出重定向到变量?

我正在使用 RHEL 5.3 操作系统、gdb7.5 和python2.7。我正在用 Python 编写一个脚本来自动化一些 gdb 调试步骤。我们可以将以下命令(“name1”)的输出存储到变量中吗?

我想这样做是因为在我的 Python 脚本中,我会将这个 ( name1) 与用户输入的字符串进行比较,如果匹配,则会执行一些操作,否则会要求用户输入另一个字符串。

如果不可能,请建议我替代方案。

0 投票
1 回答
5224 浏览

python - gdb-python :解析结构的每个字段并以适当的值打印它们(如果存在)

我正在编写一个 python 脚本来自动从 gdb 调试核心转储。我正在尝试打印包含内核数据结构和列表的数据结构(例如 struct list_head)。例如结构是这样的:

我正在使用以下 API tp 打印此结构:

gdb.execute('p (*(struct my_struct *)dev_base->priv)')

所以我可以自动打印'struct my_struct'、struct my_hardware_context ahw 的内容,但不能打印指针和列表的内容(例如struct net_device *netdev、struct pci_dev *pdev、struct list_head mac_list)(只打印地址)。那么如何使用 gdb-python 脚本打印 *netdev、*pdev 和 mac_list 的内容呢?

编辑:让我的问题更清楚

我正在编写一个 python 脚本来自动从 gdb 调试核心转储。我正在尝试打印包含内核数据结构和列表的数据结构(例如 struct list_head)。例如结构是这样的:

我正在使用以下 API 来打印此结构:(可以假设我有正确的核心转储并添加了正确的符号。

main_struct = gdb.execute('p (*(struct my_struct *)dev_base->priv)')

print main_struct

现在它将打印 struct my_struct 的所有成员的值,但最多打印一级,这意味着它将打印 struct my_hardware_context ahw 的全部内容,因为它是一个实例,但它不会打印 struct net_device *netdev、struct pci_dev *pdev 的内容, struct list_head mac_list 等,所以现在我需要手动执行如下操作:

netdev = gdb.parse_and_eval('*(*(struct my_struct *)dev_base->next->priv).netdev')

print netdev

pdev = gdb.parse_and_eval('*(*(struct my_struct *)dev_base->next->priv).pdev')

print pdev

所以我想自动化这些步骤。是否有任何 gdb-python API 或方法可以迭代 struct my_struct 并自动打印指针、数组和列表值?

谢谢。

0 投票
1 回答
309 浏览

gdb - 我可以使用 stdout/stderr 打印输出作为字符串来进行漂亮的打印吗?

我有一个函数dump(),当在 type 对象上调用时X,它会打印出对 stderr 有用的东西。

我正在尝试编写一个 GDB 漂亮打印脚本,该脚本利用某些命令的输出返回一个描述值的字符串,类似于以下内容:

不幸的是,这给了我:

警告:当前输出协议不支持重定向

我该如何解决这个问题?这甚至是获得 stderr 输出的正确方法吗?

0 投票
1 回答
865 浏览

python - gdb python:如何遍历结构内的内核链表

使用 gdb-python 脚本,我正在尝试打印包括内核数据结构和列表(例如 struct list_head)的数据结构,该结构是

因此,在迭代这个 struct my_struct 时,如何识别这个结构内有一个链表,因为 gdb 手册中没有任何 TYPE_CODE_ 常量用于链表,如果确定,在识别后如何在迭代列表时打印取消引用的结构。我在此链接gdb-python 中使用 scottt 的代码:解析结构的每个字段并以适当的值打印它们(如果存在)