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


91

我希望gdb立即运行该可执行文件,就像我键入“ run”一样(动机:我不喜欢键入“ run”)。

一种方法是将命令传递给gdb这样:

$ echo run | gdb myApp

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

查看中的选项--help,我看不到执行此操作的方法,但也许我缺少了一些东西。

Answers:


127
gdb -ex run ./a.out

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

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

编辑: 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版本是一种可能的解决方案。只是一定要读这个


1
感谢你的回答。对于我来说,该行的行为与“ gdb ./a.out”相同。
Orion elenzil 2010年

3
我刚刚确认您还可以在命令行上传递多个-ex选项,它们将按顺序运行,然后再将gdb输入传输给您。
东阮

如果程序具有以下参数,则此解决方案不起作用:./a.out a b
gigilibala 2015年

由于OSX / xcode不再支持现成的gdb(lldb是新的gdb),因此这似乎是更好的方法。
Orion elenzil

我制作了一个命令文件,并gdb -x在Linux系统上使用。OS X使用LLVMclang,因此请检查的调试功能lldb
荒木大辅'18

22

我会使用gdb脚本:

gdb -x your-script

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

file a.out
b main
r

之后,您将获得正常的交互式gdb提示符

编辑

这是真正懒惰的优化:

  1. 脚本保存为.gdbinitworking directory
  2. 之后,您只需将gdb运行为

    gdb

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


嘿,谢谢你的回答。看起来就像我想要的,除了我没有得到gdb提示符,我得到gdb被挂起,我回到命令行,好像我键入了“ ctrl-z”一样。如果我“ fg”,则gdb恢复并运行该应用程序。这是OS X.
猎户座elenzil

猎户座:嗯,这让我感到惊讶。我实际使用的每种UNIX风格(Linux,Solaris,AIX)都可以很好地工作。您正在使用哪个gdb版本?

我只是重新验证了它的行为-仍然使我退出带有gdb暂停的命令行。GNUgdb 6.3.50-20050815(Apple版本gdb-1518)(星期六UTC 2011年2月12日02:52:12)。
Orion elenzil 2011年

@orionelenzil不知道为什么,但如果你把fgr线,它的作用三立
DBR


20
(echo r ; cat) | gdb a.out

猫允许您在gdb中断后继续输入内容。


哇,真棒。您必须在退出gdb后按ctrl-c才能停止操作,但这很棒。
Orion elenzil 2011年

3
看来您在使用此功能的gdb实例上失去了一些键控制。
特维诺

而且,类似这样的问题Make breakpoint pending on future shared library load? (y or [n])将自动假定答案为“否”。
Ruslan'5

6

start 命令

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

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

就像运行一样,但它还会在处设置一个临时断点main并在此处停止。

一旦被击中,该临时断点将被停用。

starti

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

当您在做一些低级的工作时,这很棒。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.