如何在GDB中自动运行可执行文件?

ori*_*zil 82 gdb

我想gdb立即运行可执行文件,就像我输入"run"一样(动机:我不喜欢输入"run").

一种方法是将命令管道输出为gdb:

$ echo run | gdb myApp
Run Code Online (Sandbox Code Playgroud)

但是这种方法的问题在于你失去了与之交互gdb,例如.如果断点触发或myApp崩溃,则gdb退出.这里讨论这种方法.

看看中的选项--help,我没有看到这样做的方法,但也许我错过了一些东西.

Emp*_*ian 118

gdb -ex run ./a.out
Run Code Online (Sandbox Code Playgroud)

如果需要将参数传递给a.out:

gdb -ex run --args ./a.out arg1 arg2 ...
Run Code Online (Sandbox Code Playgroud)

编辑: Orion说这不适用于Mac OSX.

-ex标志自GDB-6.42005年发布以来一直可用,但OSX使用Apple的GDB分支,而Leopard的最新XCode包含GDB 6.3.50-20050815 (Apple version gdb-967),所以你运气不好.

构建当前GDB-7.0.1版本是一种可能的解决方案 请务必阅读此内容.

  • 我刚刚确认你也可以在命令行上传递多个-ex选项,它们会在向你传输gdb输入之前按顺序运行. (3认同)

小智 22

我会使用gdb脚本:

gdb -x your-script
Run Code Online (Sandbox Code Playgroud)

在那里你的脚本中包含类似:

file a.out
b main
r
Run Code Online (Sandbox Code Playgroud)

之后你有了正常的交互式gdb提示符

编辑:

这是一个真正懒惰的优化:

  1. 脚本保存为.gdbinitworking directory.
  2. 之后你只需运行gdb as

    gdb

...并且gdb自动加载并执行.gdbinit的内容.


小智 20

(echo r ; cat) | gdb a.out
Run Code Online (Sandbox Code Playgroud)

猫允许你在gdb中断后继续输入.

  • 看起来您使用此方法丢失了对gdb实例的一些键控制. (3认同)

Cir*_*四事件 6

start 命令

这个命令是另一个不错的选择:

gdb -ex start --args ./a.out arg1 arg2
Run Code Online (Sandbox Code Playgroud)

它就像跑步一样,但也会在main那里设置一个临时断点并停在那里.

该临时断点一旦被击中就会被停用.

starti

还有一个相关的starti启动程序并在第一个指令处停止,另请参阅:停止在GDB中的第一个机器代码指令

当你做一些低级别的东西时很棒.