Show HN: CodeTracer - 一款使用 Nim 和 Rust 实现的全新时间旅行调试器
CodeTracer 是一款用户友好的时间旅行调试器,旨在支持各种编程语言。 www.youtube.com/watch?v=xZsJ55JVqmU&ab_channel=metacraft-labs
License
AGPL-3.0 license 169 stars 2 forks Branches Tags Activity Star Notifications You must be signed in to change notification settings
Additional navigation options
metacraft-labs/codetracer
main BranchesTags Go to file Code
Folders and files
Name| Name| Last commit message| Last commit date
---|---|---|---
Latest commit
History
2 Commits
.github/workflows| .github/workflows
appimage-scripts| appimage-scripts
ci| ci
config| config
docs| docs
examples| examples
libs| libs
nix| nix
node-packages| node-packages
non-nix-build| non-nix-build
resources| resources
src| src
ui-tests| ui-tests
views| views
.babelrc| .babelrc
.editorconfig| .editorconfig
.envrc| .envrc
.gitattributes| .gitattributes
.gitignore| .gitignore
.gitlab-ci.yml| .gitlab-ci.yml
.gitmodules| .gitmodules
.projectile| .projectile
CHANGELOG.md| CHANGELOG.md
CODE_OF_CONDUCT.md| CODE_OF_CONDUCT.md
COPYRIGHT| COPYRIGHT
LICENSE| LICENSE
README.md| README.md
SECURITY.md| SECURITY.md
SUPPORT.md| SUPPORT.md
THIRD_PARTY_NOTICES.md| THIRD_PARTY_NOTICES.md
config.toml| config.toml
flake.lock| flake.lock
flake.nix| flake.nix
funding.json| funding.json
icon.svg| icon.svg
justfile| justfile
nim.cfg| nim.cfg
wdio.conf.js| wdio.conf.js
webpack.config.js| webpack.config.js
View all files
Repository files navigation
小提示:
您可以将下载的应用程序放置在您选择的位置(例如,macOS 上的
Applications
文件夹或 Linux 上的 ~/.local/share/applications
)。 首次启动 CodeTracer 时,它将提示您完成剩余的安装步骤,例如将命令行实用程序添加到您的 PATH。
注意:
首次启动时,macOS 用户将看到错误消息“CodeTracer 已损坏,无法打开”。 要解决此问题,请执行命令 xattr -c <path/to/CodeTracer.app>
。 我们希望通过我们加入 Apple Developer 计划来确保 CodeTracer 得到正确的签名和 Apple 的列入白名单,从而尽快解决这一不便。 有关更多详细信息,请参阅 https://discussions.apple.com/thread/253714860?sortBy=rank。
Introduction
CodeTracer 是一款用户友好的时间旅行调试器,旨在支持各种编程语言。
它将程序的执行记录到可共享的独立跟踪文件中。 您可以在 GUI 环境中加载生成的跟踪文件,该环境允许您在执行中向前和向后移动,并检查所有内存位置的历史记录。 他们说一张图片胜过千言万语——好吧,视频更好! 观看下面的演示,了解 CodeTracer 的实际应用:
The Benefits of Time-Travel
与传统的调试器相比,CodeTracer 为您提供了两个主要的超能力:
- 一旦您在录制中捕获到错误,就可以认为它已被消除! 难以重现的错误可能难以修复——您肯定经历过这种情况。 一旦使用 CodeTracer 捕获到此类错误,您通常只需 30 分钟即可找到它! 这很大程度上是下一个超能力的结果:
- 当您知道程序中任何值的来源时,大多数错误都很容易显现出来。 所有程序都会产生输出。 例如,作为对 Web 请求的响应而生成的字节、绘制在屏幕上的像素,或者可能写入终端的简单日志行。 当 CodeTracer 创建录制时,它会捕获与程序相关的用户可扩展的输出事件集。 GUI 在可搜索的按时间顺序排列的事件日志中显示这些事件。 考虑一个行为不端的程序,该程序在其执行过程中将意外输出打印到日志文件中。 单击 CodeTracer 中特定的输出事件会将您带到生成它的精确时刻和代码行。 意外值必须源自传递给日志记录函数的某个变量。 使用 CodeTracer,您现在可以提出问题“这个值来自哪里?”。 CodeTracer 将在执行中找到另一个时刻,可能早在几秒钟前,在程序的完全不同的部分中,该特定内存位置上次被写入。 这可能是内存损坏或真正的逻辑错误。 无论哪种方式,CodeTracer 都会报告来源。 假设您最终找到了负责计算问题值的正确函数,但那里的另一个输入导致了该问题。 您可以通过重复问题“这个输入来自哪里?”来继续搜索。 通常只需几次跳到更早的时间点即可到达错误的根本原因。 每次您跳转到执行中的一个新时刻时,您都可以通过向前或向后步进来无所畏惧地探索您的周围环境,并且可以访问一个后退按钮,该按钮始终可以将您带到任何以前感兴趣的点。 在旅程的每一点,我们新颖的 UI 都会一目了然地向您显示有关过去和未来的程序状态的详细信息,并且您知道您在程序精确记录的调用跟踪中的位置。 这些功能的结合,造就了真正强大的调试体验。
Current state of the project and 2025 roadmap
CodeTracer 的初始版本支持 Noir 编程语言。 它是在与 Blocksense 团队合作开发的,目前需要使用 Blocksense Noir Compiler,该编译器包含在 CodeTracer 发行版中。 CodeTracer 的开源开发得益于 Aztec Network、Arbitrum Foundation 和 Aptos Foundation 的慷慨支持。 在 2025 年期间,CodeTracer 将演变为一个全面的 Web3 开发工具包,通过获得对许多其他智能合约和零知识编程语言的支持。 它的大部分功能将被打包到可重用的库中,这些库将为创建具有高级事务跟踪功能和适用于 Visual Studio Code 和其他 IDE 的全知调试插件的区块浏览器提供支持。 CodeTracer 使用 open format 用于其跟踪文件,我们已经启动了几个社区驱动的项目,旨在增加对其他编程语言的支持:
Metacraft Labs 还在开发一个替代后端,它能够与 RR 录制文件一起使用,这将使 CodeTracer 适合调试各种系统编程语言中的大规模程序,例如 C/C++、Rust、Nim、D、Zig、Go、Fortran 和 FreePascal。
为了确定我们的优先级并帮助我们更好地了解用户群的人口统计数据,请填写 CodeTracer Developer Preferences Survey。
为了加速我们的开发,请考虑捐款给我们的 Open Collective 活动。 任何在 2025 年 6 月之前捐款超过 50 欧元的人都将永远获得我们系统编程语言测试版的早期访问权。
The features of CodeTracer in more depth
一旦你有了时间旅行,你就可以从头开始重新构想调试器的工作方式! 以下是 CodeTracer 的一些功能,使其与传统的调试器区分开来:
Omniscience
当 CodeTracer 在某一行代码处中断时,它不仅知道过去,还知道未来。 您可以立即在源代码旁边看到当前函数中所有变量的值。 这包括循环中的变量,您可以在其中轻松滚动浏览迭代。 采用的代码分支突出显示,而未执行的代码立即灰显。
Tracepoints
许多开发人员倾向于从职业生涯早期使用交互式调试过渡到主要依赖于仔细放置的打印语句,因为他们开始在分布式和实时系统中面临更困难的问题。
CodeTracer 为您提供两全其美的体验。 跟踪点允许您查看向程序添加额外代码的效果,而无需重新编译和重新录制。
添加的代码可以包含 if 语句、额外的函数调用以及各种打印或绘制捕获数据的方式。 输出通常在几秒钟内生成。
[](https://github.com/metacraft-labs/<https:/camo.githubusercontent.com/47f097503a88912574ed29ae17fa4d74171377