我试图在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设置中(“窗口”->“首选项”-> 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
我希望这可以为需要解决的问题提供更多线索。有什么想法吗?