2026-04-07
uftrace 的正确打开方式
昨天发现使用-L/--location可以让uftrace按照源码的路径来筛选日志,这就很方便了,可以直接筛选当前项目的代码。
尝试了一下感觉和预期不符,我想让uftrace筛选指定目录下的函数调用,但手册中的示例是指定筛选一个具体的代码文件。
如何搞懂此特性?
我想起22年参加开源实习的时候,当时在研究 HTML Tidy这个工具的用法,发现一个特性开关似乎没有效果,为了确认,我去看了其源码。
没错,直接去代码仓库里看源码。我指派两个模型同时去研究这个特性的用法,确定到底能不能对路径进行筛选。
均告诉我可以,于是按照他们的提示尝试了一下,成了。
bash
uftrace record -P . -L 'crates/app' -L 'crates/bench' -L 'crates/contracts' -L 'crates/daemon' -L 'crates/kernel' -L 'crates/protocol' -L 'crates/spec' --srcline --no-sched --no-event ./target/uftrace/loongclaw chat可以组合使用-L,在这里我将此项目所有的模块的路径都加了上去。
除了replay之外,还发现了一个利器——TUI。 
有那味了。uftrace tui的功能很丰富,可以折叠,可以进入函数查看调用。 
使用uftrace学习LoongClaw
目前猜测最佳插桩点或在run_cli_turn 
rust
runtime
.turn_coordinator
.handle_turn_with_address_and_acp_options_and_observer(
&turn_config,
&runtime.session_address,
input,
ProviderErrorMode::InlineMessage,
&acp_options,
crate::conversation::ConversationRuntimeBinding::kernel(&runtime.kernel_ctx),
live_surface_observer,
)
.awaitcrates/app/src/conversation/turn_coordinator.rs 有超过一万行的代码…… 这里似乎有一些重复的内容,AI说很多方法都是thin wrapper,因为Rust里没有重载,所以用这样的方式来做。
但,到底为什么需要这么多方式??? 如何研究为什么需要这么多方式?
- 手动看
- 看调用
- 看运行过程中到底调用了哪个
- AI分析