主要观点:作者遇到应用程序无法正确关闭的问题,通过valgrind
检查内存泄漏不可行,于是利用gcc
提供的运行时工具来记录析构函数,以找出导致关闭问题或段错误的原因。这是一个嵌入式应用,代码量大且多线程,调试关闭问题困难。经过调试,确认自身代码析构顺序正确但仍有段错误,通过记录析构函数和触发SIGTRAP
来调试。
关键信息:
- 介绍了使用
gcc
的运行时工具添加日志记录功能,通过过滤特定前缀来记录用户定义类的析构函数。 - 给出了设置运行时工具的示例代码,包括链接
dl
、添加CXX
标志等,并实现了相关函数。 - 展示了带有和不带有过滤的截图,以及添加
json
库后大量的日志输出,说明了记录析构函数的效果。
重要细节:
- 示例代码中包含一个类
MyClass1
及其相关实现,在main
函数中创建对象并调用打印函数。 - 记录析构函数的代码通过
dladdr
获取函数信息,进行名称反混淆和过滤,然后输出析构函数的调用信息。 - 不同的
json
对象操作会导致不同数量的析构函数调用记录。 - 运行时工具的添加会有性能影响,且仅在需要时使用,未在
MinGW
和MSVC
上测试。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。