记录所有 C++ 析构函数,穷人的运行时跟踪

主要观点:作者遇到应用程序无法正确关闭的问题,通过valgrind检查内存泄漏不可行,于是利用gcc提供的运行时工具来记录析构函数,以找出导致关闭问题或段错误的原因。这是一个嵌入式应用,代码量大且多线程,调试关闭问题困难。经过调试,确认自身代码析构顺序正确但仍有段错误,通过记录析构函数和触发SIGTRAP来调试。

关键信息:

  • 介绍了使用gcc的运行时工具添加日志记录功能,通过过滤特定前缀来记录用户定义类的析构函数。
  • 给出了设置运行时工具的示例代码,包括链接dl、添加CXX标志等,并实现了相关函数。
  • 展示了带有和不带有过滤的截图,以及添加json库后大量的日志输出,说明了记录析构函数的效果。

重要细节:

  • 示例代码中包含一个类MyClass1及其相关实现,在main函数中创建对象并调用打印函数。
  • 记录析构函数的代码通过dladdr获取函数信息,进行名称反混淆和过滤,然后输出析构函数的调用信息。
  • 不同的json对象操作会导致不同数量的析构函数调用记录。
  • 运行时工具的添加会有性能影响,且仅在需要时使用,未在MinGWMSVC上测试。
阅读 18
0 条评论