#1354·tracy

使用离线符号解析器时出现错误的行号

作者: 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,因此这可能是一个合理的解释。