我正在使用用户空间 C++ 应用程序并使用 Linux 跟踪工具包,该工具包提供跟踪点(提供者、名称等)。
我想在我的源代码中放置一个
- 跟踪点(提供者,名称,...)
在每个函数入口和出口点声明。
是否可以通过某种方式实现自动化?手动放置所有这些非常麻烦。
除了方面编程之外,我想以某种方式做到这一点。
您可以使用liblttng-ust-cyg-profile.so
帮助程序库从每个函数入口和出口获取 LTTng-UST 跟踪点。
-g -finstrument-functions
。LD_PRELOAD=/path/to/liblttng-ust-cyg-profile.so ./myApp
这将为每个检测的函数进入和退出生成跟踪事件。请注意,跟踪点将仅包含函数地址,而不包含名称。这是 cyg-profile 的限制。要将这些映射回函数名称,您可以使用类似addr2line
.
有关更多详细信息,请参阅文档的函数跟踪部分。
根据检测功能的数量,这可能会对性能产生不可忽视的影响。此外,-finstrument-functions
从技术上讲,它应该可以与 C++ 应用程序一起使用,但它可能很挑剔。我用大型的、非平凡的 C++ 应用程序编译它失败了。你的旅费可能会改变。