在回溯中格式化GDB模板参数

时间:2016-03-17 10:23:31

标签: c++ templates gdb cgal

当我在GDB中使用C ++模板库(通过终端)时,我试图找到一种漂亮的模板参数打印方法,例如,查看回溯。

作为一个例子,我在视觉上试图在这个框架中找到第二个(最外面的)模板参数,该参数在GDB中打印如下:

(gdb) f
#10 try_to_refine_element<CGAL::Null_mesh_visitor_level<
CGAL::Mesh_3::tets::Refine_facets_visitor<CGAL::Regular_triangulation_3
<CGAL::Robust_weighted_circumcenter_filtered_traits_3<... (+10397 char)

Gist

这些不是STL模板,因此STL模板打印工具不适用,并且漂亮打印特定类型不是我的兴趣(即自定义漂亮打印机),因为我只想查看模板参数的层次结构各种类/方法,而不是代表它们的内容(这些用例在gdb docs中得到解决)。 GDB中还有一些漂亮的内置设置,但似乎没有任何影响模板(如果我错过了它们,请更正!)。

有没有办法让GDB进行换行并缩进这些更易读,或者使用标准脚本?模板颜色编码将是一个奖励!目前我可以根据需要剪切粘贴并运行Python格式化,但是存在更好的,经过测试的解决方案似乎是合理的。

虽然我确信许多可视化IDE也可以解决这个问题,因为我的一般工作流程与终端中的tmux密切相关,所以找到兼容的解决方案会很不错。

1 个答案:

答案 0 :(得分:1)

使用frame filters,我创建了一个GDB Python插件来提供:https://github.com/philtweir/gdb-pretty-frame-cpp

尚未经过充分测试(仅限CGAL / boost / STL / VTK),但如果有兴趣,我可以稍微改善它。

虽然这是 答案,但我仍然希望听到任何体面的,已建立的解决方案,因为此代码仍然非常基本。