如何在GDB调试器中打印字符串值而不是十六进制?

时间:2011-04-05 03:48:16

标签: gdb debugging

(gdb) run hello
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /Users/doug/langs/c/test hello

Breakpoint 1, main (argc=2, argv=0xbffffa7c) at hw3b.c:14
14     if (argc != 2) {
(gdb) printf "%s", argv
??????(gdb) 

我在SO上搜索了其他问题,我尝试了所有的命令,但我一直在找?分数。这是为什么?

1 个答案:

答案 0 :(得分:2)

argv不是字符串,它是char** - 指向第一个可能多个C字符串的指针。

我认为你在寻找:

print argv[0]
print argv[1]
...

或者如果你想使用printf:

printf "%s\n", argv[0]

但是在这么简单的情况下真的没有理由,因为gdb确实知道如何打印char*字符串。

或者,如果你想要花哨,这可行:

print *argv@argc

语法FOO@NUM告诉它打印从NUM开始的FOO元素数组。我不知道为什么解除引用有效,但确实如此 - 我猜gdb就是那么好。有人开导我吗?