# trace-viewer **Repository Path**: lc168/trace-viewer ## Basic Information - **Project Name**: trace-viewer - **Description**: 跟踪绘制kernel函数关系调用图 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-09 - **Last Updated**: 2026-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🔍 Trace Viewer for VS Code > **专为海量 C/C++ 内核调用栈打造的极致可视化分析工具** 在进行 Linux 内核(如 RK3568 等芯片平台)或复杂 C/C++ 系统的底层开发时,追踪漫长且庞大的函数调用链(Call Graph)往往是一场噩梦。 **Trace Viewer** 是一个跨界结合了底层 GDB 调试技术与现代前端图渲染引擎的 VS Code 插件。它能将枯燥的 GDB Trace 日志瞬间转化为丝滑、可交互、可直接跳转源码的全景拓扑树。 ## ✨ 核心特性 (Features) * 🚀 **V8 级极速解析 (Stream Parsing)** * 摒弃传统的全量读存模式,采用 Node.js 原生 `readline` 流式读取。 * 轻松应对数百 MB、甚至数十万行的 GDB `.html_g` (JSONL) 追踪日志,**内存占用极低,绝不卡死 IDE**。 * 📊 **十万级节点的高性能渲染 (AntV G6)** * 底层采用阿里开源的专业图可视化引擎 **AntV G6**,承载万级节点毫无压力。 * 彻底解决传统 Canvas/SVG 在 VS Code Webview 中的残影和重绘性能瓶颈。 * 🖱️ **沉浸式硬核交互体验** * **动态胶囊排版**:节点宽度根据函数名自适应,避免密集调用时的文字重叠。 * **智能颜色指示**:紫色节点代表存在子函数,蓝色代表底层叶子节点,一目了然。 * **无极漫游**:支持鼠标滚轮无极缩放、拖拽平移,以及毫秒级的节点折叠/展开。 * ⚡ **IDE 深度联动 (代码跳转)** * 告别在日志和源码间来回切屏。按住 `Ctrl` (或 `Cmd`) 单击任意节点,瞬间在侧边栏打开对应 C/C++ 源码,并精准定位至执行行。 ## 🛠️ 技术栈 (Tech Stack) * **Backend / Scripting:** Python (GDB API 自动化追踪与 JSONL 序列化) * **Extension Core:** TypeScript, Node.js Streams API, VS Code Extension API * **Graph Engine:** AntV G6 (Canvas Rendering) ## 📸 效果演示 (Demo) *(展示右键解析、平滑缩放、以及 Ctrl+Click 跳转代码的完整流程)* ![Trace Viewer Demo](./assets/demo.gif) *(展示全景的内核启动树,如 start_kernel 展开的震撼效果)* ![Full Topology](./assets/overview.png) ## 🚀 使用指南 (Getting Started) ### 1. 准备 Trace 数据 使用本项目提供的 `step_trace.py` 脚本(基于 GDB),在你的调试环境中生成调用栈日志: \`\`\`bash # 示例:在 GDB 中加载脚本并运行 (gdb) source step_trace.py (gdb) trace_function start_kernel \`\`\` 脚本会自动在当前目录生成包含层级深度、函数名、文件路径和行号的 `*.html_g` (JSONL 格式) 日志文件。 ### 2. 在 VS Code 中一键分析 1. 在 VS Code 资源管理器中,找到生成的 `*.html_g` 文件。 2. **右键单击**该文件,选择 **`Show Call Tree`**。 3. 插件将在后台静默进行流式降维解析,并在右侧瞬间渲染出完整的调用拓扑图! ## 🧠 设计初衷 (Motivation) 开发这个工具的初衷,源于在进行嵌入式系统和 Linux 内核驱动开发时遇到的真实痛点。现有的分析工具(如 ftrace、perf)在面对具体的、带有代码行号级别的上下文梳理时,往往显得过于笨重或不够直观。 我希望打造一个**轻量级但性能彪悍**的“手电筒”,让系统工程师在排查死锁、启动卡顿或分析未知模块时,能像看地图一样俯瞰整个系统的脉络,并随时“空降”到任何一行源码中。 ## 📄 License This project is licensed under the Apache License, Version 2.0 - see the [LICENSE](LICENSE) file for details. ## 📄 贡献