在回溯中格式化 GDB 模板参数
Formatting GDB template arguments in a backtrace
当我在 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)
这些不是STL模板,所以STL-template-printing-tools不适用,漂亮打印特定类型不是我的兴趣(即自定义漂亮打印机),因为我只想查看模板的层次结构各种 classes/methods 的参数,而不是表示它们的内容(这些用例在 gdb docs 中解决)。 GDB 中还有一些漂亮的内置设置,但 none 似乎会影响模板(如果我错过了它们,请更正!)。
有没有办法让 GDB 换行和缩进更易读,或者使用标准脚本?模板颜色编码将是一个奖励!目前,我可以根据需要剪切粘贴和 运行 Python 进行格式化,但存在更好的、经过测试的解决方案似乎是合理的。
虽然我确信许多可视化 IDE 也可以解决这个问题,但由于我的一般工作流程与终端中的 tmux 紧密相关,所以最好找到一个兼容的解决方案。
使用frame filters, I've created a GDB Python plugin to provide this: https://github.com/philtweir/gdb-pretty-frame-cpp
它还没有经过很好的测试(而且只有 CGAL/boost/STL/VTK),但如果有兴趣,我可以稍微改进一下。
虽然这是一个答案,但我仍然希望听到任何体面的、成熟的解决方案,因为这段代码仍然非常基础。
当我在 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)
这些不是STL模板,所以STL-template-printing-tools不适用,漂亮打印特定类型不是我的兴趣(即自定义漂亮打印机),因为我只想查看模板的层次结构各种 classes/methods 的参数,而不是表示它们的内容(这些用例在 gdb docs 中解决)。 GDB 中还有一些漂亮的内置设置,但 none 似乎会影响模板(如果我错过了它们,请更正!)。
有没有办法让 GDB 换行和缩进更易读,或者使用标准脚本?模板颜色编码将是一个奖励!目前,我可以根据需要剪切粘贴和 运行 Python 进行格式化,但存在更好的、经过测试的解决方案似乎是合理的。
虽然我确信许多可视化 IDE 也可以解决这个问题,但由于我的一般工作流程与终端中的 tmux 紧密相关,所以最好找到一个兼容的解决方案。
使用frame filters, I've created a GDB Python plugin to provide this: https://github.com/philtweir/gdb-pretty-frame-cpp
它还没有经过很好的测试(而且只有 CGAL/boost/STL/VTK),但如果有兴趣,我可以稍微改进一下。
虽然这是一个答案,但我仍然希望听到任何体面的、成熟的解决方案,因为这段代码仍然非常基础。