如何传递参数并将stdin从文件redirect到程序在gdb中运行?

我通常运行一个程序为:

./a.out arg1 arg2 <file 

我想用gdbdebugging它。

我知道set argsfunction,但只能从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。

  1. 转到项目目录,在那里你已经编译了项目可执行文件。 发出命令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)

  1. 在开始运行程序之前,您需要设置断点。 break命令允许你这样做。 在名为main的函数的开头设置一个断点:

    (gdb)b主

  2. 一旦你有(gdb)提示符,run命令启动可执行文件运行。 如果您正在debugging的程序需要任何命令行参数,请将其指定给run命令。 如果您想在“xfiles”文件(位于项目目录中的“mulder”文件夹中)上运行我的程序,则需要执行以下操作:

    (gdb)r mulder / xfiles

希望这可以帮助。

免责声明:这个解决scheme不是我的,它是从https://web.stanford.edu/class/cs107/guide_gdb.html改编的这个gdb的简要指南,很可能是在斯坦福大学开发的。;