在 Linux 中启动 GDB 时如何传递命令行参数? [复制]

     2023-03-07     248

关键词:

【中文标题】在 Linux 中启动 GDB 时如何传递命令行参数? [复制]【英文标题】:How do I pass a command line argument while starting up GDB in Linux? [duplicate] 【发布时间】:2013-01-07 19:58:09 【问题描述】:

作为任务的一部分,我必须调试一个有错误的程序。但是,我必须先传递命令行参数才能解决这个问题。

我愿意:

gdb -tui InsertionSortWithErrors

这可行,但之后我不知道如何传递参数。我使用了gdb -help,它说明了--args,我也尝试过,但没有成功。

我希望能够获得调试器+GUI并传递命令行参数。

【问题讨论】:

【参考方案1】:

试试

gdb --args InsertionSortWithErrors arg1toinsort arg2toinsort

【讨论】:

就像在 GNU GDB 手册部分 Invoking GDB987654321@中提到的那样 如果你运行gdb -h也会提到它,而手册页中又提到了它。 @PietroSaccardi 手册页和-h 输出之间似乎存在一些差异,至少在某些 Ubuntu 版本上是这样。这可能会发生,尤其是如果命令的 man 文件没有像解析 -h 选项的源代码那样经常更新。【参考方案2】:

gdb 启动后,您可以使用“r args”运行程序。

因此,如果您通过以下方式运行代码:

$ executablefile arg1 arg2 arg3 

gdb 上调试它:

$ gdb executablefile  
(gdb) r arg1 arg2 arg3

【讨论】:

只是为了扩展这一点....我的运行通常是这样的:program --option1 --option2=argvalue 所以在 gdb 中我输入了:r --option1 --option2=argvalue 这起初对我来说并不明显。 这确实是票数最高的评论。我想补充一点,r 代表 gdb 命令 run,您可以在 gdb 中输入 help run 来查看它的一些帮助。 我不想每次启动 gdb 时都输入参数,我希望它在我的命令行历史记录中【参考方案3】:

我正在使用 GDB7.1.1,如 --help 所示:

gdb [options] --args executable-file [inferior-arguments ...]

恕我直言,这个顺序一开始有点不直观。

【讨论】:

我同意,非常不直观,所以真正的命令行应该是:$ gdb --args <executable> <argument(s)>。我错误地在 --args 之后的所有内容中添加了引号,导致 gdb 将整个内容解析为可执行文件。 我认为是因为参数紧跟在可执行文件之后,就好像你在没有 gdb 的情况下运行一样。 我认为不直观的是--args。如果拼写为--run 会非常直观【参考方案4】:

另一种选择,一旦进入 GDB shell,在运行程序之前,你可以这样做

(gdb) set args file1 file2

并检查它:

(gdb) show args

【讨论】:

如何在 Eclipse 中启动 gdb 调试之前运行 linux 脚本

】如何在Eclipse中启动gdb调试之前运行linux脚本【英文标题】:HowtorunalinuxscriptbeforelaunchinggdbdebugginginEclipse【发布时间】:2013-11-1411:50:37【问题描述】:在Eclipse中启动gdb调试之前,如何给出要运行的命令?实际上,我想在eclipse启... 查看详情

linux工具pstack

...于一名Linux下工作的c++程序员,gdb是必不可少的工具;1.1.启动gdb对C/C++程序的调试,需要在编译前就加上-g选项:$g++-ghello.cpp-ohello调试可执行文件:$gdbprogram也就是你的执行文件,一般在当前目录下。调试core文件(core是程序非法执行... 查看详情

在linux上使用gdb调试核心转储时如何知道线程的状态?

】在linux上使用gdb调试核心转储时如何知道线程的状态?【英文标题】:howtoknowstateofthethreadwhiledebuggingcoredumpwithgdbonlinux?【发布时间】:2012-05-0813:20:16【问题描述】:我在线程中遇到崩溃。在使用gdb调试coredump时,我想在崩溃前查... 查看详情

在 QtCreator 命令行上指定 GDB 启动脚本

】在QtCreator命令行上指定GDB启动脚本【英文标题】:SpecifyingGDBstartscriptonQtCreatorcommandline【发布时间】:2018-02-2715:21:20【问题描述】:我们正在使用QtCreator3.2.1来分析Linux(DebianJessie)上的核心转储。目前我们通过菜单和“加载核心... 查看详情

如何在gdb中调试多线程程序时一次继续一个线程?(代码片段)

我有一个使用两个线程的程序。我已经在两个线程中都设置了断点。在gdb下运行程序时,我想在线程之间切换并使它们运行。(线程t1处于活动状态且正在运行,线程t2;在断点处暂停时。我想停止T1运行并运行T2)。有什么办法可... 查看详情

linux中如何启动进程?进程调度命令都有哪些?

...inux运维中,进程是必须学习掌握的技能。那么Linux中如何启动进程?常用的进程调度命令有哪些?  执行中的程序称作进程。当程序的可执行文件存储在存储器中并运行时,每个进程将被动态分配系统资源、内存、安全属性和... 查看详情

如何在 Linux (redhat) 上通过 gdb 在 xterm 中使用 valgrind?

】如何在Linux(redhat)上通过gdb在xterm中使用valgrind?【英文标题】:HowtousevalgrindinxtermwithgdbonLinux(redhat)?【发布时间】:2012-01-2001:07:02【问题描述】:该命令打开一个xterm终端,该终端立即消失。xterm-egdbvalgrind--tool=drd--read-var-info=yes./... 查看详情

linux下面怎么用gdb调试多个.c文件?

...用ALD来调试汇编程序。首先在命令行方式下执行ald命令来启动调试器,该命令的参数是将要被调试的可执行程序:[xiaowp@garydoc]$aldhelloAssemblyLanguageDebugger0.1.3Copyright(C)2000-2002PatrickAlkenhellELFIntel80386(32bit),LSB,Exe 查看详情

如何在 gdb 中附加进程

...打开另一个控制台来查找子进程的pid,然后使用以下命令启动gdb:gdbattach12271其中12271是子进程ID,但附加失败:Nosuchfileordirecto 查看详情

如何在使用 Eclipse CDT 进行调试时向 gdb 提示符输入命令?

】如何在使用EclipseCDT进行调试时向gdb提示符输入命令?【英文标题】:HowcanIentercommandstoagdbpromptwhiledebuggingwithEclipseCDT?【发布时间】:2012-04-1616:22:19【问题描述】:我正在使用Eclipse(HeliosSR1)CDT进行C++开发。Eclipse与GDB接口进行调试... 查看详情

linux系统中gdb调试详细操作方法

第一:启动在shell下敲gdb命令即可启动gdb,启动后会显示下述信息,出现gdb提示符。添加编译指令:gcc-ga.c-otest打开指令:gdbtest  或者gdb  然后输入:filetest➜examplegdbGNUgdb(Ubuntu8.1.1-0ubuntu1)8.1.1Copyright(C)2018FreeSoftwareFou... 查看详情

如何在linux启动时自动执行命令或脚本

...一个性能稳定的多用户网络操作系统。有用户想要在Linux启动时候自动执行命令脚本,应该怎么设置呢?这篇文章主要介绍了详解如何在Linux启动时自动执行命令或脚本,主要有两种方式,具有一定的参考价值,感兴趣的小伙伴们... 查看详情

如何在 Linux 中存储 lockfile 命令的 PID

...某种原因崩溃时,我完成了挂锁,阻止了主脚本的任何新启动并严重影响了它的执行。有没有办法存储我的lockfile进程的PID,以便我可以在重新启动我的主要脚本 查看详情

如何在启动 git bash 终端之前运行 linux 命令

】如何在启动gitbash终端之前运行linux命令【英文标题】:Howtorunlinuxcommandbeforestartingupgitbashterminal【发布时间】:2017-10-1515:59:56【问题描述】:我正在通过gitbash在我的Windows机器上使用Docker。由于gitbash在关闭时不记录当前状态,所... 查看详情

带有参数的 xcode 命令行测试在启动时传递

】带有参数的xcode命令行测试在启动时传递【英文标题】:xcodecommandlinetestwithargumentpassedatlaunch【发布时间】:2015-07-1414:53:02【问题描述】:我在CI实施xcodebuild命令测试时遇到了小问题。我有与特定设备语言相关的测试,在xcode中... 查看详情

如何在 Visual Studio 2015 调试中将“%”符号作为命令行参数 (argv) 传递?

】如何在VisualStudio2015调试中将“%”符号作为命令行参数(argv)传递?【英文标题】:HowdoIpassthe\'%\'symbolasacommandlineargument(argv)inVisualStudio2015Debugging?【发布时间】:2016-05-1008:13:40【问题描述】:我使用的是Windows7、VisualStudio2015、C++... 查看详情

gdb调试——常用的命令

...它负责生成与GDB相关的调试信息; 1.如何对一个文件启动GDB调试?方法一:命令行输入: gdbfilename    方法二:命令行输入:gdb       & 查看详情

如何从uboot读取mac,然户传递到内核中

...。U-boot把要传递给kernel的东西保存在structtag数据结构中,启动kernel时,把这个结构体的物理地址传给kernel;Linuxkernel通过这个地址,用parse_tags分析出传递过来的参数。  本文主要以U-boot传递RAM和Linuxkernel读取RAM参数为例进行说... 查看详情