我想编写一个脚本(在某些条件下)将执行gdb并自动运行一些带有一些参数Y的程序X.一旦程序执行完毕,用户应该保持在gdb的提示符下,直到他/她显式退出它.
执行此操作的一种方法是让脚本将run命令加参数Y输出到某个文件F,然后让脚本调用gdb,如下所示:
gdb X < F
但有没有办法在不引入临时文件的情况下执行此操作?
谢谢.
给定程序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运行一些命令,然后让它退出或运行完成,那就行了
echo commands | gdb X
如果要在运行这些命令后将其保留在命令提示符下,则可以执行此操作
(echo commands; cat) | gdb X
这导致将命令回显到GDB,然后键入cat
进程,该进程将其stdin复制到stdout,该stdout通过管道传输到GDB.
有选项-x,例如
gdb -x gdb_commands exe_file
其中gdb_commands可以是例如(在android模拟器的情况下):
target remote :5039
在这里尝试了所有的答案后,
echo/cat hack虽然很聪明,却打破了gdb的一些重要功能.最值得注意的是,所有用户提示都会自动回答(因此您没有机会确认可能存在危险的操作),而Ctrl + C(停止正在调试的进程)最终会杀死cat,所以实际上你不能之后跟gdb交谈.
-x选项应该可以工作,但我无法使用我的gdb版本,它需要一个临时文件.
但是,事实证明你可以使用-ex,就像这样:
gdb -ex "target remote localhost:1234"
您还可以指定-ex多次以运行多个命令!