首页 > 解决方案 > 在 Eclipse C++ 中启用漂亮的打印

问题描述

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

我已经阅读了各种指南,这就是我所做的(我从其他 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 设置中(Window->Preferences->C/C++->Debug->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 中得到漂亮的打印(在终端中使用 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

我希望这为需要修复的内容提供更多线索。有任何想法吗?

标签: c++eclipseubuntudebugginggdb

解决方案


推荐阅读