问题标签 [gdbinit]
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.
python - 从 gdbinit 导入 python 不起作用
我已经安装了 python-opencv,我可以import cv2
从 python shell 运行和检查版本而不会出现问题。
当试图在 gdb 中获取这个 python 文件以提供一个新的 gdb 命令时,我总是得到:
我的 PC 从 Ubuntu 发行版中获得了唯一的 python 实例,为什么从 gdb 中我遇到了一个关于我可以从 python shell 加载的刚刚安装的包的导入问题。
编辑
这是一个python 2包,gdb加载python 3...似乎无法解决。
debugging - 如何挂钩 gdb 中的命令 x?
我已经尝试连接到其他命令,例如 echo 并且效果很好。但是当涉及到挂钩 x 命令时,它会失败。这是我的 .gdbinit 文件中的代码。
我知道 gdb 不接受用于挂钩的函数的别名。但是 x 已经是一个完整的功能,不是吗?我找不到它的任何别名。我也对此表示怀疑,因为单个字符太短而无法执行命令
c - GDB:重新运行程序直到它出现故障,沿途回答提示
问题
我正在尝试让gdb自动调试我正在查看的c10,000
程序,其中由于已知错误而发生崩溃的可能性很小,但确实有可能(即:有机会)。我与另一位工程师争辩说它足够严重,可以解决,所以我需要实际导致崩溃发生,以证明花时间修复它是合理的。为了加快测试速度,我计划编写一个脚本,让应用程序在 GDB 中运行数天(如果需要),直到它崩溃。
先前的研究
我已经发现了如何通过 GDB 运行简单的应用程序,直到通过 StackOverflow 上的单独答案出现段错误,但我需要稍微扩展一下这个问题。所以,我知道我可以反复运行一个程序,直到它通过以下方式崩溃:
问题
我需要做的是弄清楚如何发出某些命令。在我的程序运行几秒钟后,它会要求用户输入(通过stdin
)范围内的数字[0,100]
,然后点击ENTER。我希望它在第一次迭代时输入0
, ,在第二次迭代中等等。我意识到如果我向应用程序添加命令行参数会容易得多,但我不允许在这个时候,就必须依靠它提供的交互操作方式了。ENTER1
ENTER
问题
我将如何创建一个命令来使用 GDB 自动生成这些击键/模式?我猜我可以编写某种GDBINIT
脚本,但我主要以交互方式使用 GDB 来获取回溯、分析内存等,并且不太熟悉这些自动化任务。
谢谢你。
debugging - 这是 gdb 不间断模式自动化的一个有问题的设计吗?
我已经在我的 .gdbinit 文件中实现了此代码,以使需要停止的 gdb 命令工作(例如 x、set 等)
变量的目的$pince_debugging_mode
是通知 gdb 程序是否为了调试目的而中断目标。
我担心这种设计的信号并发性:假设我们在一个地址上放置了一个断点,在等待它被触发时,我们想用 x 命令检查一些地址。x 命令执行后,hook-stop 将被执行,因为我们已经使用 x 命令停止了线程。假设在 hook-post 执行时已经到达断点,但 hook-stop 没有意识到这一点并且$pince_debugging_mode
仍然等于 0,因此它将执行c &
命令并且目标将继续。因此,由于这个并发问题,断点处的停止没有任何意义。
这个问题还没有发生过,但我怕发生的几率,即使很低,我也不想冒险。我能做些什么来避免这个可能的问题?
注意:定义 hookpost-x 是有问题的,因为每当 x 命令抛出异常时 hookpost 将不会被执行,因此在抛出异常的 x 命令之后将无法继续
gdb - 如何根据环境在 gdbinit 中有条件部分
在gdb手册中有这部分:
如果别的
此命令允许在脚本中包含有条件执行的命令。if 命令接受一个参数,这是一个要计算的表达式...
当我使用数字表达式时,我可以在我的 gdbinit 中执行测试,例如
但是当我想对一个字符串进行测试时,像这样:
然后当我启动 gdb 时出现错误:
我尝试查找表达式语法的文档或示例以编写我的条件块,但未成功。
我想要实现的是添加一堆基于环境变量的命令。所以我需要在我的 gdbinit 中有这样的部分:
如何做到这一点?
编辑:看起来最简单的方法是使用python执行这种操作:如何访问.gdbinit内部和gdb本身内部的环境变量?
如果没有办法使用“纯”gdb 命令来实现这一点,我想这个问题应该作为副本关闭。
c - 在 GDB 中查找 argv 地址
我正在尝试了解堆栈的工作原理,因此我编写了一个非常简单的 C 程序来运行 GDB 并检查堆栈:
我编译了程序并在 GDB 中为 main() 函数的开头设置了一个断点。我对堆栈在执行过程中应该如何看待的期望是:
较低的内存地址... | ebp = esp = 堆栈帧指针 | 退货地址 | argv | 弧线 | ...更高的内存地址
随着程序的进行,堆栈将向低内存地址的方向增加(为 bur 局部变量分配 100 个字节)
看看 GDB,情况似乎并非如此。
- 堆栈帧似乎位于 0xbffff048
- 返回地址似乎是 0xbffff04c
- 但看起来 argc(值为 2)位于 0xbffff050
argv 在哪里?任何人都可以看看我的截图并帮助我做出正面或反面吗?
谢谢!
gdb - 如何在 gdbinit 函数中有条件地执行命令
我有一个gdb
函数,在gdbinit
文件中定义:
如何获取my-shell-func
返回状态并使用它来控制加载新的二进制输出?
windows - 在 Windows 中将 .gdbinit 放在哪里?
它应该被称为.gdbinit
orgdb.ini
吗?
我想我会试试这个文件。
我正在使用使用 MinGw 的 Vectorcast 进行测试。我将具有两个名称 (.gdbinit
和gdb.ini
) 的文件复制到 Vectorcast 目录和 MinGWbin
目录中gdb.exe
,因为我不确定哪个是the current working directory
,但看不到该文件中的任何内容。
那么,我应该把它放在哪里,我应该怎么称呼它?
arm - 加载符号后 GDB 自动执行命令
我正在用 GDB 遥控器调试一个微控制器。我有多个构建目标,我希望有一个通用的 .gdbinit 文件用于刷新和/或调试所有不同的目标。
我正在使用 BAT 脚本启动 GDB,其中可调试的 .elf 文件作为 GDB 的参数给出。这样 GDB 将加载符号,并且我的 .gdbinit 也正在正确运行。
我的 gdbinit:
问题是 gdbinit 已运行,并且在加载二进制文件之前发出了“目标远程”命令,GDB 将产生错误:
之后直接:
如果我从 gdbinit 中删除“目标远程”命令并在 GDB 控制台中手动调用它,一切正常,但我不想这样做,我想自动化一切。
加载符号后如何自动执行命令?在 GDB 完成初始化和运行 gdbinit 之后,是否会触发某种钩子?我可以挂钩发布阅读符号吗?
c - 无法从 .gdbinit 获取文件
我有一个~/.gdb_bps
包含 GDB 断点的文件。我用save breakpoints .gdb_bps
. 我试图在 GDB 开始时通过将此行添加到以下位置来获取此文件 ~/.gdbinit
:
当我启动 GDB 时,我得到了错误:
但是 GDB 会话期间的采购按预期工作:
我的问题是为什么source .gdb_bps
在使用它时会出错~/.gdbinit
?