通过vs代码远程调试臂板时,pretty-printer无法正常工作

时间:2018-06-28 14:51:56

标签: c++ visual-studio-code arm gdb remote-debugging

我正在尝试通过vs代码从VM ubuntu 16.04 amd64主机远程调试c ++应用程序到cubietruck板(ARM®Cortex™-A7双核)的debian armbian目标。
我仅在字段

后面添加了本指南https://medium.com/@spe_/debugging-c-c-programs-remotely-using-visual-studio-code-and-gdbserver-559d3434fb78
"setupCommands": [
          {
              "description": "Enable pretty-printing for gdb",
              "text": "-enable-pretty-printing",
              "ignoreFailures": true
          }
      ],

因此整个launch.json已变为

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "C++ Launch",
        "type": "cppdbg",
        "request": "launch",
        "miDebuggerPath": "/home/user/ARM/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb",
        "setupCommands": [
          {
              "description": "Enable pretty-printing for gdb",
              "text": "-enable-pretty-printing",
              "ignoreFailures": true
          }
      ],
        "program": "/home/user/myproject/bin/app",
        "miDebuggerServerAddress": "localhost:9091",
        "args": [],
        "stopAtEntry": false,
        "cwd": "/home/user/myproject",
        "environment": [],
        "externalConsole": true,
        "linux": {
          "MIMode": "gdb"
        },
        "osx": {
          "MIMode": "gdb"
        },
        "windows": {
          "MIMode": "gdb"
        }
      }
    ]
  }

在launch.json文件中,以便支持漂亮的打印机。
在主机中,我使用的是linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf gdb,而ARM板上的gdb具有本机8.0.1 gdb。
除了漂亮的打印机以外,其他所有东西都工作正常,因为字符串无法正确显示。每当我将鼠标悬停在字符串上时,就会弹出npos和_M_dataplus字段,应该打开_M_dataplus字段以查看实际的字符串。
在主机中,linaro gdb支持pretty-printer,因为命令info pretty-printer给出了输出:

builtin  
mpx_bound128 

但是,当我在目标gdb 8.0.1中给出相同的命令时,我得到:

Undefined info command: "pretty-printer".  Try "help info".

我还在主机主文件夹中创建了一个.gdbinit文件,其中包含enable pretty-printer命令。我在调试控制台中看到它已成功执行,但结果也是错误的。
由于我是远程调试的新手,因此应该怎么做才能使漂亮打印机工作。我应该在远程板上也安装漂亮打印机还是我做错了其他事情?

1 个答案:

答案 0 :(得分:0)

1。确保您的垃圾箱不是用-static-libstdc++

构建的。

2。如果必须使用-static-libstdc++,请在〜/ .gdbinit中添加以下内容:

python sys.path.append('/usr/share/gdb/python')  <--provided by gdb `show configuration: --with-gdb-datadir=`
python sys.path.append("/usr/share/gcc-8/python/")  <--corresponding to your gcc version
source /usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25-gdb.py  <--this script is for std::string/list/map/etc pretty-printing.

3。编辑您的launch.json:

"setupCommands": [
  { "text": "-interpreter-exec console \"set sysroot /\"", "ignoreFailures": true },
  { "text": "-enable-pretty-printing", "ignoreFailures": true },
],

这是我为解决发生在我身上的相同问题所做的工作。希望这能解决您的问题。

ref1:http://tomszilagyi.github.io/2018/03/Remote-gdb-with-stl-pp

ref2:http://transit.iut2.upmf-grenoble.fr/doc/gdb-doc/html/gdb/Writing-a-Pretty_002dPrinter.html

ref3:Import Error: No module name libstdcxx