在Eclipse C ++中启用漂亮的打印

时间:2019-06-13 17:18:47

标签: c++ eclipse ubuntu debugging gdb

我试图在Eclipse中为STL启用漂亮的打印。这些是我的版本:

  • Eclipse版本:2018-09(4.9.0)
  • gdb 7.11.1
  • Xubuntu 16.04
  • gcc 7.4.0
  • g ++ 7.4.0

我已经阅读了各种指南,这就是我所做的(我从其他SO qns复制了答案):

步骤1:下载漂亮的打印机:

$ cd /home/ali/Downloads
$ svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

第2步:编辑gdbinit

$ subl /home/ali/.gdbinit

在.gdbinit中粘贴以下内容:

python
import sys
sys.path.insert(0, '/home/ali/Downloads/python/')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

我还尝试了gcc附带的一个,即:

sys.path.insert(0, '/usr/bin/gcc-8/python')

此外,我已将这些行添加到printers.py:

if length > 100: length = 100

第3步:设置Eclipse

在Eclipse的GDB设置中(“窗口”->“首选项”-> C / C ++->“调试”->“ GDB”),将GDB命令文件路径设置为刚创建的.gdbinit文件。另外,在同一标签中,选中“漂亮打印”复选框。

对于需要精美打印的任何现有调试配置(运行->调试配置),请选择调试配置,然后在“调试器”选项卡上设置GDB命令文件路径。

第4步:测试GDB

您可以按照以下步骤验证GDB是否打印精美(一旦完成了上一过程的前两个步骤):

将以下代码保存在名为test.cpp的文件中:

#include <map>
int main() {
std::map<char, int> first;
first['a'] = 10;
first['b'] = 20;
}

使用g ++编译:

$ g++ -g -o test test.cpp

运行gdb:

$ gdb test

设置断点:

(gdb) b test.cpp:5

这将输出:

Breakpoint 1 at 0x40093f: file src/test.cpp, line 5.

运行程序:

(gdb) run
Starting program: /path/to/test

点击断点时,将显示gdb提示。使用以下命令打印地图:

(gdb) p first

如果一切正常,您将看到以下输出:

$1 = std::map with 1 elements = {[97 'a'] = 10}

在Eclipse中,我仍然无法获得很好的打印效果(使用Terminal中的gdb可以正常工作):

seq_of_probs = {<No data fields>}}
Default:{...}
Decimal:{...}
Hex:{...}
Binary:{...}
Octal:{...}

其中seq_of_probs的类型为std::vector<std::string>

有人可以建议缺少或错误的任何步骤吗?我已经尝试了一天。

我无法想到的事情

DSF-GDB或CDI-GDB有关系吗?我不知道我的Eclipse使用的是哪一个。

在Eclipse中,我的默认gdb调试器是gdb。我将其更改为usr / bin / gdb。无论哪种方式,两者均无效。

我的Eclipse使用的gdb是否已启用python?我的gdb版本应启用python。还是有另一个二进制文件?

编辑:

现在我收到此错误:

报告了多个错误。

1)无法执行MI命令:

-var-create - * state
Error message from debugger back end:
Cannot instantiate printer for default visualiser

2)无法创建变量对象

3)无法执行MI命令:

-var-create - * state
Error message from debugger back end:
Cannot instantiate printer for default visualiser

状态是向量。

更新:

因此,当我使用gcc 4.8和g ++ 4.8时,我认为漂亮的打印在Eclipse中有效。这就是我得到的:

Name : test
Details:std::vector of length 3, capacity 4 = {1, 2, 3}
Default:{...}
Decimal:{...}
Hex:{...}
Binary:{...}
Octal:{...}

Name : [0]
Details:N/A (child of pretty-printed object)
Default:1
Decimal:1
Hex:0x1
Binary:1
Octal:01

我希望这可以为需要解决的问题提供更多线索。有什么想法吗?

0 个答案:

没有答案