🧠 Gỡ lỗi các bản dựng iBrowe với Symbol Server và Source Server

Để đơn giản hóa quá trình debug iBrowe trên Windows (x86, x64, arm64), tất cả các bản dựng chính thức đều tải lên các tệp symbol (.pdb) cùng với các binary tương ứng lên một Symbol Server được lưu trữ riêng.

🔗 iBrowe Symbol Server

https://ibrowe-symbols.s3.ibrowe.com/

⚠️ Lưu ý: URL này không thể duyệt trực tiếp bằng trình duyệt — nó được thiết kế để sử dụng tự động bởi các công cụ debug như Visual Studio, WinDbg hoặc LLDB.

⚙️ Cấu hình Visual Studio để sử dụng symbol

Có hai cách để cấu hình truy cập symbol:

1. Sử dụng biến môi trường (Khuyến nghị)

Trước khi khởi động Visual Studio (devenv.exe), chạy lệnh sau trong Command Prompt:

set_NT_SYMBOL_PATH=SRV*C:\symbols*https://msdl.microsoft.com/download/symbols;SRV*C:/symbols*https://ibrowe-symbols.s3.ibrowe.com

  1. Thiết lập thông qua giao diện Visual Studio (Tùy chọn)

Vào:

Tools → Options → Debugging → Symbols

Thêm URL sau:

https://ibrowe-symbols.s3.ibrowe.com/

🧬 Tự động lấy mã nguồn từ GitHub

Các tệp .pdb của iBrowe đã được source-indexed, nghĩa là Visual Studio có thể tự động tải về mã nguồn từ GitHub — ngay cả khi bạn chưa clone mã nguồn về máy.

Yêu cầu hệ thống:

Đã cài đặt Python 3

Trình khởi chạy py có trong PATH

Cách hoạt động

Khi bạn step vào một frame trong call stack, Visual Studio sẽ hiển thị hộp thoại hỏi bạn có muốn tải về mã nguồn không. Nó sử dụng một lệnh như sau:

cmd /c "mkdir ... & py -3 -c "import urllib.request; url = '<đường dẫn raw GitHub>'; open('<local>.cc', 'wb').write(urllib.request.urlopen(url).read())"

👉 Chấp nhận hộp thoại bằng cách:

Nhấn “Trust commands from this symbol file”

Sau đó nhấn “Run”

Kết quả: bạn sẽ thấy chính xác dòng mã nguồn được hiển thị trong IDE.

⚠️ Về PGO và hành vi khi debug

iBrowe sử dụng Profile-Guided Optimization (PGO) cho các bản dựng release.

Ngay cả khi đã có đầy đủ symbol và mã nguồn, bạn có thể thấy debugger:

Bỏ qua các breakpoint mong đợi

Không đi theo flow code như bình thường

Điều này là bình thường do PGO sử dụng tối ưu hóa cao và inlining mạnh mẽ.

📚 Tài liệu tham khảo

Nội dung được điều chỉnh từ tài liệu chính thức của Brave: 🔗 https://github.com/brave/brave-browser/wiki/Symbol-Server-Setup

Symbol Server của iBrowe đã được cấu hình lại cho các bản fork.