问题标签 [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.
gdb - 无法使用 GDB 插入硬件断点
我试图将手表设置为地址
(gdb) watch 0x7536546
但我收到错误警告:无法插入硬件观察点 6。无法插入硬件断点:您可能请求了太多硬件断点/观察点
我尝试插入的第一个硬件断点
有什么问题,我该怎么办?
python - 如何检查 gdb.Type
我正在用 python 编写一些专门的 gdb 脚本,我对 gdb.Type 类有一些疑问。我看到了很多产生相关类型的方法,比如 Type.const 和 Type.volatile,但是我如何检查一个 Type 实例,并问“这个类型是 const 吗?”和“这个类型是 volatile 吗?”
更一般地说,我有两种不是 == 的类型。但是它们的字符串是相同的。我应该如何比较两种类型,我应该如何以编程方式确定它们的差异?
c++ - How to set a gdb breakpoint on a label in all template function instantiations
Suppose I have the following C++:
Is it possible to set a gdb breakpoint on label1
for all instantiations of bar? In the above, it is easy -- there is just one instantiation. In my actual use case there are a large number spread all over the code base.
Said another way, in my gdb commandfile, is there a way to avoid the need to know a priori about every template instantiation of bar? In my actual use case, my aim is to emit some information about program state at the point of the labels (worry not, no programs were harmed by goto
).
I know I can set a breakpoint on the label for a specific instantiation of bar
as follows:
I also know about rbreak
which can be used to break on the entry of all template functions, but apparently does not have the -label
option. I don't want to break on the entry point -- just the the label(s). I also looked to see if I could combine rbreak
with until label1
but that didn't work.
Two other approaches I've considered are:
- grep for the labels (or could even just be specially formed comments), emit line numbers and use this information to populate/generate my gdb command file with source file and line number break points. This will definitely work, but was sort of hoping to avoid the need to "generate" my command file.
- Since I intend to implement some gdb Python pretty printers, perhaps I can parse the source from within python to get the line numbers and subsequently set the breakpoints. I'm just learning the Python API and it wasn't immediately obvious how to get the equivalent of
list
from within the gdb python package.
Any suggestions?
python - 在下级进程中执行一个函数,并将返回的结果返回给python
如前一个问题(如何检查 gdb.Type)中所述,我正在用 python 编写一些专门的 gdb 脚本。
我想在一个同样从下级进程获得的值上调用从下级进程获得的函数指针,并将返回的结果作为 gdb.Value 获取。如何?
一种可能性是将所有内容转换为字符串和便利变量,然后使用 gdb.execute() 执行 CLI 打印命令(例如 p $2($1) ),这将创建一个新的便利变量,然后获取便利变量。这似乎迂回且容易出错。有没有更好的办法?
linux - Makefile:没有规则可以使“/constants.py”需要目标“/constants.py.in”。停止
我目前正在使用 ubuntu 18.0.4.5 机器,我一直在试图弄清楚整个内核调试过程。我偶然发现需要自动运行 GDB 脚本以及 vmlinux 文件,特别是驻留在 /usr/src/linux../scripts/gdb/vmlinux-gdb.py 下的脚本。我确保脚本在使用 vmlinux 文件初始化时运行并出现以下错误
发生此错误后,我检查了 /usr/share/gdb/auto-load/gdb/linux 目录以查找丢失的文件,仅找到 2 个相关文件:
在 constants.py.in 文件中是与 python 混合的 C 代码,并评论说构建会处理这个问题。可以在此处找到确切的 Makefile 和 constants.py.in 文件以供参考:https ://elixir.bootlin.com/linux/v5.4/source/scripts/gdb/linux/Makefile https://elixir.bootlin。 com/linux/v5.4/source/scripts/gdb/linux/constants.py.in
第一次尝试构建导致以下结果:
经过一些试验和错误(我对 Makefile 语言没有经验),我将 constants.py.in 复制到/
目录并尝试再次构建并收到以下错误:
我不明白那FORCE
是什么,看起来像是某种makefile配置,但我找不到合理的解释或补丁,尝试在下面构建任何东西时都会发生同样的错误/usr/src/linux-.../
试图了解如何修复构建过程并最终创建正确的 constants.py ,希望这是vmlinux-gdb.py
在调试期间完成工作的最后一部分
gdb - 在 gdb 中运行带有全屏选项(例如 pudb)的 python 脚本失败
我正在尝试调试 gdb python 脚本。因此,我在脚本中添加了以下行:
不幸的是,pudb 似乎只绘制在屏幕顶部(并且在侧面被切割)。此外,在底部,我看到了我所做的各种其他尝试的剩余部分(例如,玩弄 urwind,见下文)。
我什至可以简单地通过运行 gdb(没有任何程序)然后运行来重现:
我相信 gdb 运行 python 脚本的方式会破坏终端信息,但是,我不知道如何解决这个问题。
注意:我使用的是 python 2.7 和 gdb 7.9(不能更改这些版本)。
我尝试配置 ~/.config/pudb/pudb.cfg 并将显示更改为 xterm 而不是 auto。
我试图通过使用检查终端信息
哪个报告正确(当前行=60,列=210)
我尝试运行其他屏幕程序,例如 ptpdb 和 urwid(在那里做了教程)并得到了类似的结果。
任何帮助,将不胜感激。
c++ - 使用python api在gdb中列出值的成员
我正在尝试找到一种方法来从 GDB 中的 python api 获取 c++ 类对象的成员列表。
到目前为止,我能找到的唯一解决方案是使用ptype <value>
然后尝试为成员解析它,我想知道是否有更好的方法我找不到。
python - 如何从python的崩溃转储中获取信息
我有一个 python 服务器正在运行(cherrypy webserver)。当一个 URL/a
被命中时,它ctypes
用来调用一个 C 库函数。库函数导致 seg-fault 导致 python 服务器崩溃并生成 250MB 崩溃转储。
如果我使用 gdb:gdb python python-dump.core
那么它只显示堆栈跟踪libc.so
调用了中止和退出。
有没有办法获取上次调用的 python 函数的名称?可能是python变量的值?
我曾尝试直接从用 C 编写的守护程序调用相同的函数,并且 gdb 能够为我提供调用罪魁祸首函数的确切函数名称和传递的值。当故障转储来自 python 进程时,有没有办法获得相同级别的详细信息?
gdb - gdb python: turn expression into address
I want to get the address from a value in the same way that the x
examine command works. Internally, this seems to use value_as_address
, which turns any gdb expression into a core address. I have not managed to find a binding for this anywhere in the Python API surface. Further, the workarounds I've seen so far don't seem to accomplish this:
It is not reasonable to cast the type to a void pointer because this is language dependent (will not work in Rust executables, for instance):
will fail if there is no "void" type, as in the case of Rust.
I want to accept integers, which should come out unchanged.
In particular, I want a function that takes strings such as "0x5555555740a0"
, "main"
, etc and turns them into an integer containing their address.
python-poetry - 使用诗歌安装时调试符号
使用诗歌时,我可以安装带有调试符号编译的二进制扩展的 python 包吗?例如,这种方式 a gdb
orpy-spy
将获得必要的漂亮打印输出