2

我正在使用用户空间 C++ 应用程序并使用 Linux 跟踪工具包,该工具包提供跟踪点(提供者、名称等)。

我想在我的源代码中放置一个

- 跟踪点(提供者,名称,...)

在每个函数入口和出口点声明。

是否可以通过某种方式实现自动化?手动放置所有这些非常麻烦。

除了方面编程之外,我想以某种方式做到这一点。

4

1 回答 1

2

您可以使用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++ 应用程序编译它失败了。你的旅费可能会改变。

于 2015-08-06T16:21:27.833 回答