当前位置:  开发笔记 > Android > 正文

调用gdb以自动将参数传递给正在调试的程序

如何解决《调用gdb以自动将参数传递给正在调试的程序》经验,为你挑选了4个好方法。

我想编写一个脚本(在某些条件下)将执行gdb并自动运行一些带有一些参数Y的程序X.一旦程序执行完毕,用户应该保持在gdb的提示符下,直到他/她显式退出它.

执行此操作的一种方法是让脚本将run命令加参数Y输出到某个文件F,然后让脚本调用gdb,如下所示:

gdb X < F

但有没有办法在不引入临时文件的情况下执行此操作?

谢谢.



1> Nathan Fellm..:

给定程序X和参数列表,最简单的方法a b c:

X a b c

是使用gdb--args选项,如下:

gdb --args X a b c

gdb --help有这个说--args:

--args Arguments after executable-file are passed to inferior

这意味着后面的第一个参数--args是要调试的可执行文件,之后的所有参数都按原样传递给该可执行文件.


你甚至可以`gdb -ex run --args prog arg ...`让程序自动启动

2> Adam Rosenfi..:

如果你想通过GDB运行一些命令,然后让它退出或运行完成,那就行了

echo commands | gdb X

如果要在运行这些命令后将其保留在命令提示符下,则可以执行此操作

(echo commands; cat) | gdb X

这导致将命令回显到GDB,然后键入cat进程,该进程将其stdin复制到stdout,该stdout通过管道传输到GDB.


请注意,如果您这样做(所有readline编辑功能,历史记录等),您将失去shell交互性.

3> 小智..:

有选项-x,例如

gdb -x gdb_commands exe_file

其中gdb_commands可以是例如(在android模拟器的情况下):

target remote :5039


另请注意,如果要避免使用临时文件,可以使用进程替换:`gdb -x <(echo commands)exe_file`
只需使用`gdb -ex'foo'-ex'bar'`来运行gdb,并先执行命令`foo`和`bar`。

4> crazy2be..:

在这里尝试了所有的答案后,

    echo/cat hack虽然很聪明,却打破了gdb的一些重要功能.最值得注意的是,所有用户提示都会自动回答(因此您没有机会确认可能存在危险的操作),而Ctrl + C(停止正在调试的进程)最终会杀死cat,所以实际上你不能之后跟gdb交谈.

    -x选项应该可以工作,但我无法使用我的gdb版本,它需要一个临时文件.

但是,事实证明你可以使用-ex,就像这样:

gdb -ex "target remote localhost:1234"

您还可以指定-ex多次以运行多个命令!

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有