如何debug本项目
如何debug本项目
opentelemetry-go-auto-instrumentation 提供了一些方便用户混合插桩二进制程序的方法。
1. 进行混合编译前设置-debug选项
$ ./otel set -debug
使用 -debug 编译选项时,工具将编译未优化的二进制文件,同时保留所有生成的临时文件,如 otel_rules。你可以查看这些文件,了解工具注入了哪些代码。
2. 查看<font style="color:rgb(31, 35, 40);">.otel-build</font>
目录
即使不使用 -debug 选项,该工具也会在 <font style="color:rgb(31, 35, 40);">.otel-build</font>
中保留必要的修改文件副本,其结构如下:
.otel-build├── instrument│ ├── baggage│ │ ├── otel_inst_file_context.go│ │ ├── otel_inst_file_ot_baggage_linker.go│ │ └── otel_inst_file_ot_baggage_util.go│ ├── grpc│ │ ├── clientconn.go│ │ ├── otel_trampoline.go│ │ └── server.go│ ├── http│ │ ├── otel_trampoline.go│ │ ├── roundtrip.go│ │ └── server.go│ ├── log│ │ ├── log.go│ │ └── otel_trampoline.go│ ├── otel│ │ └── otel_inst_file_trace.go│ ├── runtime│ │ ├── otel_inst_file_runtime_linker.go│ │ ├── otel_trampoline.go│ │ ├── proc.go│ │ └── runtime2.go│ ├── slog│ │ ├── logger.go│ │ └── otel_trampoline.go│ └── trace│ ├── otel_inst_file_ot_trace_context.go│ ├── otel_inst_file_ot_trace_context_linker.go│ ├── otel_inst_file_span.go│ └── otel_inst_file_tracer.go└── preprocess ├── backups │ ├── app2.go.bk │ ├── go.mod.bk │ └── go.sum.bk ├── dry_run.log ├── otel_rules │ ├── grpc72047 │ │ ├── ... │ ├── http02075 │ │ ├── client_setup.go │ │ ├── ... │ ├── log09344 │ │ └── setup.go │ ├── otel_setup_inst.go │ ├── otel_setup_sdk.go │ └── slog54146 │ └── setup.go ├── otel_user │ ├── app2.go │ ├── go.mod │ └── go.sum ├── rule_bundle.json └── rule_cache └── ...
术语 “预处理 ”和 “代码插桩 ”代表在两个不同阶段生成的文件。有关这两个阶段的信息,请参阅本文档。例如,instrument/grpc/clientconn.go
表示代码注入后的 clientconn.go
文件。 rule_bundle.json
包含匹配的规则,几乎所有与调试相关的重要文件都将保留在此目录中。
3. 使用delve来进行debug
在混合编译过程中,使用 -debug 选项不会进行任何优化。用户可以使用 delve 轻松调试二进制文件。