GDB JIT 編譯介面整合

GDB JIT 編譯介面整合讓 V8 能夠提供 GDB 來自 V8 執行時期發出的原生程式碼的符號和除錯資訊。

當 GDB JIT 編譯介面停用時,GDB 中的典型回溯包含標記為 ?? 的框架。這些框架對應於動態產生的程式碼

#8  0x08281674 in v8::internal::Runtime_SetProperty (args=...) at src/runtime.cc:3758
#9  0xf5cae28e in ?? ()
#10 0xf5cc3a0a in ?? ()
#11 0xf5cc38f4 in ?? ()
#12 0xf5cbef19 in ?? ()
#13 0xf5cb09a2 in ?? ()
#14 0x0809e0a5 in v8::internal::Invoke (construct=false, func=..., receiver=..., argc=0, args=0x0,
    has_pending_exception=0xffffd46f) at src/execution.cc:97

然而,啟用 GDB JIT 編譯介面讓 GDB 能夠產生更具資訊性的堆疊追蹤

#6  0x082857fc in v8::internal::Runtime_SetProperty (args=...) at src/runtime.cc:3758
#7  0xf5cae28e in ?? ()
#8  0xf5cc3a0a in loop () at test.js:6
#9  0xf5cc38f4 in test.js () at test.js:13
#10 0xf5cbef19 in ?? ()
#11 0xf5cb09a2 in ?? ()
#12 0x0809e1f9 in v8::internal::Invoke (construct=false, func=..., receiver=..., argc=0, args=0x0,
    has_pending_exception=0xffffd44f) at src/execution.cc:97

GDB 仍未知的框架對應於沒有來源資訊的原生程式碼。請參閱 已知限制 以取得更多詳細資料。

GDB JIT 編譯介面在 GDB 文件中指定:https://sourceware.org/gdb/current/onlinedocs/gdb/JIT-Interface.html

先決條件 #

啟用 GDB JIT 編譯介面 #

GDB JIT 編譯介面目前預設從編譯中排除,並在執行時期停用。若要啟用它

  1. 使用已定義的 ENABLE_GDB_JIT_INTERFACE 建立 V8 函式庫。如果您使用 scons 建立 V8,請使用 gdbjit=on 執行它。
  2. 在啟動 V8 時傳遞 --gdbjit 旗標。

若要檢查您是否已正確啟用 GDB JIT 整合,請嘗試在 __jit_debug_register_code 上設定中斷點。這個函式會被呼叫以通知 GDB 有關新的程式碼物件。

已知限制 #