std::chrono gdb漂亮的打印机
std::chrono gdb pretty printer
我有点惊讶gdb没有为std::chrono持续时间类型提供开箱即用的漂亮打印机,因为它们是标准库的一部分。有了gdb 10.2(通过最新的Clion IDE,尽管这不应该是Clion特有的——它只是隐藏在引擎盖下的gdb(,我看到了毫无帮助的:
system_clock::m_time_counter = {std::chrono::nanoseconds}
而不是例如
system_clock::m_time_counter = 133ns
这迫使我每次都要扩展字段并深入挖掘类型,以显示持有我感兴趣的std::chrono::duration<long, std::ratio>::rep
值的__r成员。我在ubuntu 20.04上,使用gdb 10.2
我对使用任何gdb漂亮的打印机持开放态度(欢迎使用python版本(,并希望确保我不会错过任何实现,这样我就不会重新发明轮子。
我最终在主目录中添加了一个.gdbinit文件,其中包含几行python,实现了我想要的单行值显示。
python # way to tell .gdbinit we enter a python section
import gdb
class ChronoPrinter:
def __init__(self, val):
self.val = val
def to_string(self):
integral_value = self.val['__r']
return f"{integral_value}"
p = gdb.printing.RegexpCollectionPrettyPrinter("sp")
p.add_printer("chrono", "^std::chrono::duration<.*>$", ChronoPrinter)
o = gdb.current_objfile()
gdb.printing.register_pretty_printer(o, p)
end # end of python section
然后我得到了美丽的景色:
system_clock::m_time_counter = {std::chrono::nanoseconds} 33
注意:repo中提到的libstdc++gdb打印机https://sourceware.org/gdb/wiki/STLSupport似乎只影响被忽略的类型名称(例如,将std::chrono::duration<long,std::ratio>转换为更友好的std::chrono::纳秒(。列出gdb会话中启用的打印机的一个有用命令是:
info pretty-printers
libstdc++-v6下的输出没有任何与chrono相关的内容。
> objfile /lib/x86_64-linux-gnu/libstdc++.so.6 pretty-printers:
> libstdc++-v6
> __gnu_cxx::_Slist_iterator
> __gnu_cxx::__8::_Slist_iterator
> __gnu_cxx::__8::__normal_iterator
> __gnu_cxx::__8::slist
> __gnu_cxx::__normal_iterator
... /*many more but nothing chrono related */
相关文章:
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- 如何使用打印到 PDF 打印机在 MFC 和 CView 中以编程方式打印而不提示输入文件名?
- 漂亮的计数器习语的错误或格式错误的静态订单惨败?
- GCC C++ STL 漂亮的打印机 - 手动调用并仅要求大小
- 用于从一个基派生的类的GDB漂亮的打印机
- 共享PTR地图与LLDB漂亮的打印机
- 在 GDB 漂亮的打印机中显示特定的 std::vector 元素
- gdb 漂亮打印机插件例程 处理 std::basic_string<wchar_t(,.*)?>$
- 在使用 boost::fusion 迭代时将漂亮的打印机绑定到 boost::p hoenix actor
- 使用 gdb 漂亮的打印机在 eclipse cdt 中显示智能指针
- 漂亮的打印机,用于在Mac OS中使用Eclipse/CDT调试C++代码
- 适用于Qt5的GDB漂亮打印机
- GDB 漂亮打印导入错误:没有名为"打印机"的模块
- 漂亮的地图打印机抛出类型错误
- 我可以直接在gdb漂亮的打印机中调用程序的' operator[] '吗?
- 用于igraph_vector_t和igraph_matrix_t的GDB漂亮打印机
- 如何在gdb中为漂亮的打印机调用构造函数
- Gdbinit、漂亮的打印机和相对目录
- 从 ostream 或 ostream_iterator 派生,使流在C++中漂亮的打印机
- 漂亮的打印 - 使用格式不正确的C++代码测试漂亮的打印机