16 điểm bởi GN⁺ 2025-03-07 | 1 bình luận | Chia sẻ qua WhatsApp
  • Trình gỡ lỗi du hành thời gian dễ sử dụng, hỗ trợ nhiều ngôn ngữ lập trình
    • Ghi lại quá trình thực thi chương trình để tạo ra tệp trace độc lập có thể chia sẻ, và trong môi trường GUI có thể di chuyển qua lại giữa các bước thực thi để xem lịch sử của mọi vị trí bộ nhớ
  • Ưu điểm của gỡ lỗi du hành thời gian
    • Có thể dễ dàng xử lý các lỗi khó tái hiện: nếu có bản ghi thực thi tại thời điểm lỗi xảy ra, có thể xác định nguyên nhân trong vòng 30 phút
    • Khi biết nguồn gốc của giá trị thì việc sửa lỗi sẽ dễ hơn
      • Khi đầu ra bất thường xuất hiện trong chương trình, có thể nhấp vào sự kiện đó để lập tức xác định điểm phát sinh vấn đề
      • CodeTracer hỗ trợ truy vết nơi giá trị đó được tạo ra, giúp tìm ra nguyên nhân gốc của lỗi chỉ sau vài lần di chuyển
      • Có thể tự do di chuyển tiến lùi và khám phá ở bất kỳ thời điểm nào trong quá trình thực thi chương trình
  • Tracing sử dụng định dạng mở, và đang triển khai các dự án hỗ trợ ngôn ngữ như Ruby, Python
    • Có kế hoạch hỗ trợ gỡ lỗi cho các ngôn ngữ lập trình hệ thống như C/C++, Rust, Nim, D, Zig, Go, Fortran, FreePascal thông qua tích hợp với backend RR

Các tính năng chính của CodeTracer

Gỡ lỗi toàn tri (Omniscience)

  • Có thể lập tức xem giá trị biến trong quá khứ và tương lai tại một dòng mã cụ thể trong lúc thực thi
  • Có thể dễ dàng khám phá sự thay đổi giá trị biến trong vòng lặp
  • Mã đã thực thi và mã chưa thực thi được phân biệt rõ ràng

Tracepoint

  • Có thể lập tức kiểm tra sự thay đổi giá trị biến trong chương trình mà không cần thực thi thêm mã
  • Có thể dễ dàng thêm điều kiện, lời gọi hàm, đầu ra dữ liệu để gỡ lỗi

Call Trace

  • Không chỉ là stack trace đơn thuần mà còn cung cấp toàn bộ cây lời gọi hàm của quá trình thực thi chương trình
  • Có thể dễ dàng khám phá thông qua lọc và sắp xếp

Khám phá trạng thái và lịch sử (State and History Explorer)

  • Có thể truy vết lịch sử thay đổi giá trị của mọi biến
  • Có thể lập tức chuyển đến vị trí mã nơi giá trị biến đã thay đổi
  • Tự động truy vết giá trị gốc của biến đã được sao chép, giúp việc phân tích lỗi dễ dàng hơn

Nhật ký sự kiện (Event Log)

  • Cung cấp các sự kiện quan trọng trong chương trình theo thứ tự thời gian
  • Khi nhấp vào một sự kiện cụ thể, có thể lập tức chuyển đến đoạn mã tại thời điểm đó

Đầu ra terminal (Terminal Output)

  • Tái hiện và ghi lại đầu ra stdout, stderr như trong terminal để có thể kiểm tra đầu ra chương trình đã được ghi lại
  • Khi nhấp vào, có thể chuyển đến chính xác vị trí mã đã tạo ra đầu ra đó

Stepping bằng chuột (Mouse Stepping)

  • Có thể dùng chuột để lập tức chuyển đến phần cụ thể trong mã
    • Chuyển dòng: nhấp chuột giữa (cũng có thể Ctrl+클릭)
    • Đi vào hàm: nhấp đúp vào lời gọi hàm để đi vào bên trong (cũng có thể Ctrl+Alt+클릭)
    • Tùy chọn bổ sung: có thể khám phá thêm tính năng trong menu chuột phải

Scratchpad

  • Có thể cố định giá trị biến tại một thời điểm cụ thể để so sánh và phân tích
  • Có thể phân tích vấn đề bằng cách so sánh trực quan luồng thực thi mã

Lệnh CLI của CodeTracer

  • ct run <application> - chạy chương trình và tự động ghi lại
  • ct record <application> - tạo tệp trace
  • ct replay - phát lại tệp trace đã tạo
  • ct replay <program-name> - tải bản ghi thực thi gần nhất
  • ct replay --id=<trace-id> - chạy với một ID trace cụ thể
  • ct replay --trace-folder=<trace-folder> - chạy tệp trace trong một thư mục cụ thể
  • ct help / ct --help - xem các lệnh có sẵn
  • ct version - kiểm tra phiên bản hiện tại

Phím tắt bàn phím

  • Phím tắt mặc định được thiết kế thân thuộc với người dùng Visual Studio™
  • Cung cấp chức năng đảo ngược của các thao tác gỡ lỗi hiện có khi dùng cùng phím Shift (F10 = "bước tiếp theo", Shift+F10 = "bước trước đó")
  • Có thể tùy chỉnh phím tắt bằng cách sửa tệp ~/.config/codetracer/.config.yml

1 bình luận

 
GN⁺ 2025-03-07
Ý kiến trên Hacker News
  • Thật tuyệt. Ngày trước tôi từng có cơ hội gửi yêu cầu tính năng cho các nhà thiết kế bộ xử lý Intel

    • Tôi đã yêu cầu bộ đếm tick hệ thống để đóng dấu thời gian cho log, và họ đã triển khai nó
    • Tôi cũng yêu cầu thanh ghi giá trị và mặt nạ bus để kích hoạt ngắt debug, và họ cũng đã triển khai
    • Tôi đã yêu cầu lịch sử nguồn của các lệnh nhảy, nhưng điều đó đã không thành hiện thực
    • Khi đó Intel bán các đầu dò debug đắt tiền để ghi lại bus
    • Lịch sử lệnh nhảy của tôi có lẽ đã có thể khiến phần lớn người dùng không còn cần đến chúng
    • Cuối cùng nó đã không thành hiện thực, và chúng tôi lại phải build lại mã ở chế độ 'debug' để thêm trace và theo dõi
  • Việc hỗ trợ Noir là hợp lý vì dấu vết thực thi đặc biệt có giá trị trong ZK proof

    • Tôi đang mong có cả bản triển khai Python và Ruby
    • Do tính động của các ngôn ngữ này, đôi khi bug đặc biệt khó tìm
    • Không biết ở đây có ai đã dùng Noir chưa
    • Tôi cũng tò mò về overhead hiệu năng của cơ chế tracing
    • Cũng muốn biết có kế hoạch hỗ trợ JavaScript/TypeScript cho phát triển web không
  • Nếu bạn dùng Clojure hoặc ClojureScript, tôi khuyên nên thử FlowStorm

  • Noir là một ngôn ngữ đặc thù miền dành cho hệ thống chứng minh SNARK

  • Tôi tò mò vì sao CodeTracer lại được viết bằng hai ngôn ngữ

  • Tôi thực sự rất thích. Tôi luôn muốn có thứ như thế

    • Sau này tôi sẽ thử với Python
    • Giá mà cũng có hỗ trợ JS/TS
    • Tôi cũng tò mò liệu rr debugger có hỗ trợ macOS, Windows và Android không
    • Cũng muốn biết việc ghi lại đối với ứng dụng thông thường nặng đến mức nào
    • Sẽ rất hay nếu LLM có thể cung cấp ngữ cảnh qua MCP server, hoặc để LLM chọn lịch sử biến mà nó muốn xem
    • Tính năng lọc bản ghi cũng sẽ rất hữu ích
  • Trông rất hay, nhưng trên hệ thống production thì file trace sẽ tăng rất nhanh

    • Tôi tò mò có cách nào để gắn file với từng session cụ thể không
  • Cảm ơn vì đã xây dựng hệ sinh thái Nim

  • Rất đáng mong đợi. Tôi đã quyên góp trên Open Collective rồi

    • Đội ngũ có rất nhiều người tài năng
    • Có một giao diện rất ấn tượng cho time-travel debugging
    • Nếu dùng rr thì sẽ không thể chạy trên macOS
    • May là có thể dễ dàng tạo lima VM từ xa
  • Chúc mừng ra mắt. Cho đến nay các bạn đã làm rất tuyệt

    • Hiện tại tôi chưa cần đến nó, nhưng sẽ theo dõi sự phát triển của các backend thay thế và việc hỗ trợ thêm ngôn ngữ lập trình
    • Cảm ơn