Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gdb printf的奇怪行为_Gdb - Fatal编程技术网

gdb printf的奇怪行为

gdb printf的奇怪行为,gdb,Gdb,我对9.1版中的gdbprintf有问题 echo -e '#include<stdio.h> \n int main(){ \n printf("Hello"); \n }' > test.c gcc -g test.c -o test echo 'break test.c:4' > test.gdb echo 'run' >> test.gdb echo 'set $aux = (char*)malloc(256)' >>

我对9.1版中的gdb
printf
有问题

echo -e '#include<stdio.h> \n int main(){ \n printf("Hello"); \n }' > test.c

gcc -g test.c -o test

echo 'break test.c:4' > test.gdb
echo 'run' >> test.gdb
echo 'set $aux = (char*)malloc(256)' >> test.gdb
echo 'set $e = strcpy($aux, "abc")' >> test.gdb
echo 'printf "%s", $aux' >> test.gdb

gdb --batch --command=test.gdb test
预期输出(与gdb v8相同):

我已经检查了
字符集
,但似乎还可以。 有什么想法吗?

这是GDB9.2中固定的

如果您不能升级到GDB9.2,但可以重新编译现有发行版的GDB9.1,那么有两行代码

在gdb 9.1-0ubuntu1附带的Ubuntu 20.04上:

  • 运行
    apt build dep gdb
    从源代码中拖入构建gdb所需的包
  • 运行apt install dpkg dev(获取
    /usr/bin/dpkg source
  • 取消注释
    /etc/apt/sources.list中的
    deb src
  • 运行apt更新
  • 将cd刻录到空目录,然后运行
    apt source gdb
    。在一个新的目录中执行此操作将使编译后更容易清理
  • cd到
    gdb-9.1
    并应用到
    gdb/printcmd.c
  • 构建并安装gdb。例如,要将其放入默认的
    /usr/local/bin
    ,您需要运行

  • 这在gdb 9.2中已经修复。谢谢@MarkPlotnick至少这个问题可以作为参考,因为一些Linux发行版的默认gdb包仍然是9.1版
    Breakpoint 1 at 0x1167: file test.c, line 4.
    
    Breakpoint 1, main () at test.c:4
    4    }
    �e���
    
    Breakpoint 1 at 0x1167: file test.c, line 4.
    
    Breakpoint 1, main () at test.c:4
    4    }
    abc
    
          mkdir build
          cd build
          ../configure
          make
          make install