Как заставить команду вызова GDB распознать новую строку в функции return
У меня есть следующее:
$ cat 1.c
#include <stdio.h>
static char buf[1000];
const char*
foo(void)
{
memcpy(buf, "abc", 3);
buf[3] = '\n';
memcpy(buf+ 4, "def", 3);
buf[7] = '\n';
buf[8] = 0;
return buf;
}
int main()
{
foo();
printf("%s", buf);
return 0;
}
Я компилирую это: gcc -g -O0 1.c
и запустите GDB: gdb ./a.out
Я устанавливаю точку останова в строке "printf", затем выдаю команду вызова:
(gdb) call foo()
$4 = 0x600980 "abc\ndef\n"
Вы можете видеть, что символ новой строки не поднят.
Я использую этот трюк, чтобы обойти это:
(gdb) call printf("%s", foo())
abc
def
$5 = 8
Это работает, но довольно громоздко. Интересно, есть ли более лаконичный способ?
Если вызов printf - лучшее решение здесь, есть ли способ сказать gdb не показывать "$5 = 8"?
1 ответ
Вы можете видеть, что символ новой строки не поднят.
Наоборот, вы можете увидеть два символа новой строки в буфере (как и ожидалось) - вот что \n
средства.
Интересно, есть ли более лаконичный способ?
Сжатый способ - это то, что GDB уже реализует. Вы, кажется, хотите многословный путь. Пытаться:
(gdb) printf "%s", foo()
(Примечание: это очень отличается от call printf
что вы уже пробовали.)