使用离线符号解析器时出现错误的行号
作者: ariel-miculas创建于 2026年5月5日更新于 2026年8月17日
我正在对 Rust 代码进行工具化(使用 https://docs.rs/tracy-client/latest/tracy_client/ 并设置 TRACY_SYMBOL_OFFLINE_RESOLVE=1),我注意到行号似乎不太对。例如,一个符号显示了包含结尾符 } 的行号。我使用 https://docs.rs/addr2line/latest/addr2line/,并检查了该特定偏移量返回的同一行(包含 })。对于符号解析,我使用 ./update/build/tracy-update -r <input.tracy> <output.tracy>。Claude 建议从符号偏移量中减去 1,理由是符号指向返回地址,因此我们需要回到执行调用的指令:
diff --git a/update/src/OfflineSymbolResolverAddr2Line.cpp b/update/src/OfflineSymbolResolverAddr2Line.cpp
index e8809243..1c92d2e4 100644
--- a/update/src/OfflineSymbolResolverAddr2Line.cpp
+++ b/update/src/OfflineSymbolResolverAddr2Line.cpp
@@ -97,7 +97,7 @@ public:
for( ; entryIdx < batchEndIdx; entryIdx++ )
{
const FrameEntry& entry = inputEntryList[entryIdx];
- ss << " 0x" << std::hex << entry.symbolOffset;
+ ss << " 0x" << std::hex << (entry.symbolOffset - 1);
}
std::string resultStr = ExecShellCommand( ss.str().c_str() );gdb 在 get_frame_address_in_block 中确实减去了 1,因此这可能是一个合理的解释。
内容来源: wolfpld/tracy