使用gdb调试基于参数的C程序

5
我有一个C++程序,可以通过传递带字符串的方式运行它。
g++ -o a main.cpp -lpthread

并使用 ./a "好的很好" 执行它。

但是我如何使用gdb进行调试呢? main.cpp调用其他文件中包含的函数。

gdb ./a "Good nice"

将"--"视为文件,并显示找不到该文件!

我想逐行调试!


另外,务必使用“-g”编译您的程序,否则这一切都是徒劳无功。 - aaronman
4个回答

6

使用gdb的--args选项:

gdb --args ./a "Good nice"

还要在编译器调用中添加-g选项,否则gdb将无法将可执行文件与源代码连接起来:

g++ -g -o a main.cpp -lpthread

@aaronman 是的,为了能够使用调试器。但是这个问题不是关于程序参数的问题吗? - cmaster - reinstate monica
如果他向你展示他如何编译它,而你知道这是错误的,却不告诉他,那么你的回答有用吗? - aaronman
2
如果我们在这里,你也应该加上-Wall...;-) - László Papp
@LaszloPapp 感谢您的留言 :D 但我认为这样会偏离主题。不过我还是可以给您的评论点赞。 - cmaster - reinstate monica
首先执行 g++ -g -o b main.cpp foo.cpp,然后执行 gdb --args ./b "good nice"。接着输入 s 逐行执行程序时会提示 the program is not being run - user123
显示剩余2条评论

5

不带参数使用gdb

gdb ./a

在运行程序之前,在gdb中进行以下操作:

set args "Good nice"

您可以使用以下命令查看您设置的参数:

show args

详细信息请参见此处


一点提示:如果您在设置参数时有疑问,请使用“show args”。 - RajSanpui
@kingsmasher1 没错,我会把这个加到答案里。 - Yu Hao
在上述过程之后,当我按下s来逐行调试时,它会显示程序未被运行 - user123
你需要通过输入“run”来运行它。 - Yu Hao

3

gdb ./prog -> 设置参数 字符串 -> 运行.


这将执行整个程序并输出结果。我想逐行调试! - user123

3
另一个选择是在 run 后提供参数。
$gdb ./a
 run "Good nice"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接