linux gdb 执行命令,关于linux:gdb如何从脚本执行目标程序

我想使用gdb调试程序。 但是我通过脚本调用了该程序。

如何使用gdb?

该脚本很长,我无法使用gdb的命令行参数直接调用该程序。

另外,脚本启动时创建的进程是短暂的,因此无法将gdb附加到该进程。

我想要做的是,使用该程序启动gdb,然后添加断点

执行脚本(仅供参考-它也带有参数),然后在遇到断点时执行我想要的任何操作。

我查看了gdb中的shell选项,但是如果我没有记错的话,它将生成一个新的shell,并在完成后返回gdb。 这不是我想要的。

如果有更好的方法,请告诉我。

"该脚本很长,我无法使用gdb的命令行参数直接调用该程序。",您能在脚本中找到该程序吗?

无法在需要调试的程序所在的位置编辑脚本,然后将程序替换为" gdb program -ex" run"或类似内容?

我的脚本调用了另一个perl脚本,该脚本添加了很多参数,然后最终调用了原始二进制文件,我尝试了一下并成功了。谢谢@ dbrank0。 但是有没有办法从gdb做到这一点,而不是寻找和编辑脚本?

有几种方法。

真正的老派方式是将循环插入程序的main中,例如:

volatile int zzz;

...

int main() {

while (!zzz) sleep (1);

然后,运行您的脚本。在单独的窗口中,在要调试的程序上运行gdb,然后使用attach附加到睡眠程序。然后,您可以设置断点等,最后:

(gdb) set var zzz = 1

(gdb) cont

一种较新的方式(如"至少在gdb中已经存在10年"中的"新"方式)是编辑脚本,并在要调试的程序调用之前放置gdb --args。但是,此方法并不总是有效。除其他事项外,它无法正确处理重定向。

最后,您可以使用多级调试。这是所有人的"最新"方法。在这里,我关注我关于该主题的博客文章:

$ gdb /bin/sh  # or whatever runs your script

(gdb) set args arguments-to-the-script

(gdb) set detach-on-fork off

(gdb) set target-async on

(gdb) set non-stop on

(gdb) set pagination off

然后,您可以执行以下操作:

(gdb) add-inferior -exec program-you-want-to-debug

...然后切换到下一个并设置断点。现在切换回第一个下一个和run -都应该起作用!

您能否帮助GDB / bin / bash无法在Eclipse CDT中执行该应用程序?

我过去使用过几种方法。

将yourprog重命名为yourprog.real。制作一个名为yourprog的脚本,该脚本运行gdb --args yourprog.real"$@"。

使yourprog对其自身的pid调用gdb,然后在循环中调用sleep。

也许您可以为stackoverflow.com/questions/58318816/提供帮助?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值