Как заставить команду вызова 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 что вы уже пробовали.)

Другие вопросы по тегам