Как я могу напечатать строковое значение, а не шестнадцатеричное в отладчике GDB? - PullRequest
0 голосов
/ 05 апреля 2011
(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 Ответ

2 голосов
/ 05 апреля 2011

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 просто так хорош.Кто-нибудь просветит меня?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...