0

我正在使用 BCC 开发用于内核跟踪的 eBPF 程序。一旦我在运行我的代码时收到以下错误消息:

/virtual/main.c:16:36: error: member reference type 'struct Qdisc *' is a pointer; did you mean to use '->'?
    bpf_trace_printk("%ld\n", qdisc.limit);    
                              ~~~~~^

我知道我的代码有什么问题,而且很容易纠正。但我注意到有一个名为/virtual/main.c. 我猜 BCC 将我的原始 C 代码(传递给BPFPython 中的对象)转换为存储在名为/virtual/main.c. 然后中间的 C 代码通过Clangand编译成 BPF 字节码LLVM,BPF 代码最终被挂接到内核中。

我想知道我的猜测是否正确。如果是,有什么方法可以看到存储在其中的中间代码/virtual/main.c?我想知道密件抄送对我的原始代码做了哪些更改。

非常感谢!

4

1 回答 1

3

DEBUG_PREPROCESSOR您可以通过传递给BPF()调用来告诉 bcc 转储重写的 C 代码。

BPF(..., debug=DEBUG_PREPROCESSOR)
于 2022-02-24T08:55:34.417 回答