我有以下内容:
$ 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”?
答案 0 :(得分:0)
您可以看到未提取换行符。
相反,您可以在缓冲区中看到两个换行符(如预期的那样) - 这就是std::vector<bool>
的含义。
我想知道是否有更简洁的方式?
简洁的方式是GDB已经实现的方式。您似乎想要详细方式。尝试:
\n
(注意:这与您已尝试过的(gdb) printf "%s", foo()
非常不同。)