2

我有一个关于bpftrace语法的问题,希望有人以前看过。

在查看bpftrace参考文档时,我已经能够成功地跟踪用户应用程序功能。那里没有问题。我想不通的是如何将探针附加到 C++ 方法

例如,这是我正在使用的语法和错误:

$ bpftrace -e 'uretprobe:/usr/share/BigApp:BigApp::MethodName { printf("method return\n"); }'
1.34-35: syntax error, unexpected path, expecting { 

将 bpftrace 探针附加到 C++ 用户应用程序的正确语法是什么?

4

2 回答 2

3

主文件

#include <iostream>

class BigApp {
  public:
    void methodName() {
      std::cout << "method Name!";
    }
};

int main() {
  BigApp bigApp;      
  bigApp.methodName();      
  return 0;
}

g++ main.cpp -o main

# locate mangled symbol name
readelf -Ws /home/koxt/dev/cpp/main | grep methodName
69: 00000000004007ee    30 FUNC    WEAK   DEFAULT   14 _ZN6BigApp10methodNameEv

bpftrace -e 'uprobe:/home/koxt/dev/cpp/main:_ZN6BigApp10methodNameEv { printf("1"); }'
于 2019-11-28T19:03:06.590 回答
0

bpftrace 目前支持不带 demangle 的探针 c++ 名称,例如

uprobe:executable:"function signature" {
   //...
}

https://github.com/caringi/bpftrace/commit/e28ad2ca4276e1433e293dcc0346545fc316fae5

于 2021-11-03T12:05:40.020 回答