我正在使用用户空间C ++应用程序并使用Linux跟踪工具包,它提供了跟踪点(提供者,名称等)。
我想在源代码中放置一个
每个函数入口和出口点的- tracepoint(provider,name,...)
语句。
是否可以通过某种方式自动化?手动放置所有这些非常麻烦。
除了方面编程之外,我想以某种方式做到这一点。
答案 0 :(得分:1)
您可以使用h3
帮助程序库从每个函数入口和出口获取LTTng-UST跟踪点。
liblttng-ust-cyg-profile.so
重新编译程序。-g -finstrument-functions
这将为每个已检测的函数入口和出口生成跟踪事件。请注意,跟踪点仅包含函数地址,而不包含名称。这是cyg-profile的限制。要将这些映射回功能名称,您可以使用LD_PRELOAD=/path/to/liblttng-ust-cyg-profile.so ./myApp
等实用程序。
有关详细信息,请参阅文档的Function Tracing部分。
根据仪表功能的数量,这可能会产生不可忽视的性能影响。此外,addr2line
在技术上应该与C ++应用程序一起使用,但它可能很挑剔。我已经无法使用大型非平凡的C ++应用程序进行编译。您的里程可能会有所不同。