如何在GDB中自动运行可执行文件?
我希望如何在GDB中自动运行可执行文件?,gdb,Gdb,我希望gdb立即运行可执行文件,就像我键入“run”一样 (动机:我不喜欢输入“run”) 一种方法是通过管道将命令发送到gdb,如下所示: $ echo run | gdb myApp 但是这种方法的问题是,您失去了与gdb的交互性, 例如,如果断点触发或myApp崩溃,gdb退出。 讨论了该方法 查看--help中的选项,我看不到实现这一点的方法,但可能我遗漏了一些东西。我会使用gdb脚本: gdb -x your-script 脚本中包含以下内容: file a.out b main
gdb
立即运行可执行文件,就像我键入“run”一样
(动机:我不喜欢输入“run”)
一种方法是通过管道将命令发送到gdb
,如下所示:
$ echo run | gdb myApp
但是这种方法的问题是,您失去了与gdb
的交互性,
例如,如果断点触发或myApp
崩溃,gdb
退出。
讨论了该方法
查看
--help
中的选项,我看不到实现这一点的方法,但可能我遗漏了一些东西。我会使用gdb脚本:
gdb -x your-script
脚本中包含以下内容:
file a.out
b main
r
之后,您将看到正常的交互式gdb提示符
编辑:
下面是一个针对真正懒惰者的优化:
.gdbinit
在工作目录中
gdb
gdb -ex run ./a.out
如果需要将参数传递给a.out
:
gdb -ex run --args ./a.out arg1 arg2 ...
编辑:
说这在MacOSX上不起作用
-ex
标志自2005年发布以来一直可用,但OSX使用苹果的GDB分叉,而Leopard的最新XCode包含GDB 6.3.50-20050815(苹果版本GDB-967)
,所以你运气不好
构建当前版本的GDB-7.0.1是一种可能的解决方案。一定要阅读
cat允许您在gdb中断后继续键入。
gdb-xstart
命令
此命令是另一个好选项:
gdb -ex start --args ./a.out arg1 arg2
它类似于run,但也在main
处设置一个临时断点并在那里停止
此临时断点一旦被命中即被停用
starti
还有一个相关的starti
,它启动程序并在第一条指令处停止,另请参见:
当你在做一些低级的事情时,感觉很棒。嘿,谢谢你的回答。这看起来正是我想要的,除了我没有得到gdb提示符,我得到gdb被暂停,我回到命令行,好像我输入了“ctrl-z”。如果我选择“fg”,则gdb将恢复,应用程序将运行。这是OS X。猎户座:嗯,这让我很惊讶。与我实际使用的每种UNIX风格(Linux、Solaris、AIX)都能很好地配合使用。您使用的是什么gdb版本?我刚刚验证了这一行为-我仍然会退出到命令行w/gdb suspended.GNU gdb 6.3.50-20050815(苹果版本gdb-1518)(Sat Feb 12 02:52:12 UTC 2011)。@orionelenzil不知道为什么,但是如果您在r
行之后放置fg
,它正常工作start
命令提供了b
+r
的快捷方式:谢谢您的回答。该行的行为与我的“gdb./a.out”相同。我刚刚确认,您也可以在命令行上传递多个-ex选项,并且在将gdb输入传输给您之前,它们将按顺序运行。如果程序具有如下参数:/a.out a b
,则此解决方案不起作用,因为OSX/xcode不再支持开箱即用的gdb(lldb是新的gdb),这现在似乎是更好的方法。我制作了一个命令文件,并在Linux系统上使用了gdb-x
。OS x使用LLVM和clang,所以请查看lldb
的调试功能。哇,太棒了。退出gdb后必须按住ctrl-c键才能停止cat,但这太棒了。看起来使用t时gdb实例失去了一些键控制此外,像在将来的共享库加载时使断点挂起?(y或[n])
之类的问题将自动假定答案为“否”。
gdb -ex start --args ./a.out arg1 arg2