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

时间:2010-01-22 18:37:03

标签: gdb

我想让gdb立即运行可执行文件,就像我输入“run”一样 (动机:我不喜欢打字“跑”)。

一种方法是将命令传递给gdb,如下所示:

$ echo run | gdb myApp

但这种方法的问题是你失去了与gdb的互动, 例如。如果断点触发或myApp崩溃,gdb退出。 讨论了这种方法here

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

5 个答案:

答案 0 :(得分:111)

gdb -ex run ./a.out

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

gdb -ex run --args ./a.out arg1 arg2 ...

编辑: Orion表示这不适用于Mac OSX。

-ex(2005年发布)以来GDB-6.4标志已经可用,但OSX使用Apple的GDB分支,而Leopard的最新XCode包含GDB 6.3.50-20050815 (Apple version gdb-967),所以你出去了好运。

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

答案 1 :(得分:22)

我会使用gdb脚本:

gdb -x your-script

其中 your-script 包含以下内容:

file a.out
b main
r

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

修改

这是真正懒惰的优化:

  1. 将脚本.gdbinit保存在working directory
  2. 之后您只需将gdb作为

    运行

    gdb

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

答案 2 :(得分:20)

(echo r ; cat) | gdb a.out

cat允许你在gdb中断后继续输入。

答案 3 :(得分:5)

start命令

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

gdb -ex start --args ./a.out arg1 arg2

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

此临时断点一旦被命中就会被停用。

<强> starti

还有一个相关的starti启动程序并在第一条指令处停止,另请参阅:Stopping at the first machine code instruction in GDB

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

答案 4 :(得分:3)

gdb -x <(echo run) --args $program $args