如何传递参数并将stdin从文件redirect到程序在gdb中运行?
我通常运行一个程序为:
./a.out arg1 arg2 <file
我想用gdbdebugging它。
我知道set args
function,但只能从gdb提示符下工作。
将parameter passing给gdb中的run
命令。
$ gdb ./a.out (gdb) r < t Starting program: /dir/a.out < t
你可以这样做:
gdb --args path/to/executable -every -arg you can=think < of
魔术比特是--args
。
只需在gdb命令控制台中键入run
以开始debugging。
如果你想在gdb
run
裸指令来执行带有redirect和参数的程序,你可以使用set args
:
% gdb ./a.out (gdb) set args arg1 arg2 <file (gdb) run
我无法用--args
参数实现相同的行为, gdb
猛烈地转义redirect,即
% gdb --args echo 1 2 "<file" (gdb) show args Argument list to give program being debugged when it is started is "1 2 \<file". (gdb) run ... 1 2 <file ...
这实际上是redirectgdb本身的input,而不是我们真正想要的
% gdb --args echo 1 2 <file zsh: no such file or directory: file
在你的项目上启动GDB。
-
转到项目目录,在那里你已经编译了项目可执行文件。 发出命令gdb和可执行文件的名称如下:
gdb projectExecutablename
这将启动gdb,打印如下:GNU gdb(Ubuntu 7.11.1-0ubuntu1〜16.04)7.11.1 Copyright(C)2016 Free Software Foundation,Inc. …………… …………………………….input“apropos word”search与“word”相关的命令。从projectExecutablename读取符号…完成。 (GDB)
-
在开始运行程序之前,您需要设置断点。 break命令允许你这样做。 在名为main的函数的开头设置一个断点:
(gdb)b主
-
一旦你有(gdb)提示符,run命令启动可执行文件运行。 如果您正在debugging的程序需要任何命令行参数,请将其指定给run命令。 如果您想在“xfiles”文件(位于项目目录中的“mulder”文件夹中)上运行我的程序,则需要执行以下操作:
(gdb)r mulder / xfiles
希望这可以帮助。
免责声明:这个解决scheme不是我的,它是从https://web.stanford.edu/class/cs107/guide_gdb.html改编的这个gdb的简要指南,很可能是在斯坦福大学开发的。;