🪵 Ghi lại log của JavaScript Engine trong iBrowe

Nếu bạn cần thu thập log nội bộ từ engine JavaScript (V8) khi chạy iBrowe, bạn có thể sử dụng các cờ (flags) ghi log khi khởi chạy. Việc này rất hữu ích khi cần gỡ lỗi các hành vi cấp thấp của V8.


🚀 Khởi chạy iBrowe với chế độ ghi log

ibrowe --no-sandbox --js-flags="--log-all --log-file=/path/to/logs/%t.log"

Lệnh trên sẽ bật chế độ ghi log toàn diện và xuất log ra tệp, trong đó %t sẽ được thay bằng dấu thời gian hiện tại.


🧩 Các biến đặc biệt trong tên file log

Bạn có thể tùy chỉnh tên tệp log với các placeholder sau:

  • %p: ID tiến trình hiện tại
  • %t: Dấu thời gian hiện tại (tính bằng millisecond)

🔗 Tham khảo chi tiết: https://github.com/v8/v8/blob/a802d5aae5a28f7b762d836429d7c1d4da98537e/src/logging/log.cc#L2107-L2114


🎯 Các cờ ghi log hữu ích của V8

Ngoài --log-all, bạn có thể sử dụng thêm các cờ sau để lọc nội dung log:

  • --log-code
  • --log-function-events
  • --log-timer-events
  • --log-snapshot-positions
  • --log-source-code
  • --log-maps

📘 Xem toàn bộ định nghĩa các cờ: https://github.com/v8/v8/blob/a802d5aae5a28f7b762d836429d7c1d4da98537e/src/flags/flag-definitions.h#L2207-L2229


🧵 Ghi log tùy chỉnh (C++ - kiểu printf)

Đối với các trường hợp gỡ lỗi nâng cao, bạn có thể ghi log thủ công từ mã C++ như sau:

#include "src/strings/string-stream.h"

HeapStringAllocator allocator;
StringStream strstream(&allocator);
strstream.Add("hello log %d", int_value);
strstream.Log(isolate);

Cách này cho phép định dạng linh hoạt và xuất trực tiếp vào luồng log gắn với V8 isolate.


📚 Dựa theo tài liệu Brave và mã nguồn V8: https://github.com/v8/v8 https://github.com/brave/brave-browser