Zircon 中的例外狀況 階段:
zxdb 收到「第一次機會」例外狀況的通知。 在這個階段,zxdb 可能會處理這個例外狀況。舉例來說 在單一步驟或中斷點例外狀況發生後繼續執行,例外狀況例外狀況 也會停止處理程序。
zxdb 可選擇將例外狀況轉送至一般處理常式 偵錯工具不存在。接著,元件本身可能會解析 例外狀況。
如果在這個階段,系統仍無法處理例外狀況,zxdb 就會取得例外狀況 再次當做「第二次機會」例外狀況。
轉送例外狀況
如果發現例外狀況並繼續執行 continue
、step
、
next
等... zxdb 會重新執行例外指令。這通常是因為
,元件執行作業無法繼續執行。
這項行為可能會導致 gtest
發生問題,但下列情況除外
以及預期的測試結果這就是所謂的「死亡測試」。不過,
測試控管工具會擷取此例外狀況並繼續執行測試。
如要將例外狀況轉送至元件,必須明確指出例外狀況
轉寄。您可以使用 --forward
將例外狀況轉送至 continue
指令:
舉例來說,在預期發生當機時,死亡測試報告如下:
══════════════════════════
Invalid opcode exception
══════════════════════════
Process 2 (koid=57368) thread 7 (koid=57563)
Faulting instruction: 0x4356104fba24
🛑 Process 2 Thread 7 scudo::die() • fuchsia.cpp:28
26 uptr getPageSize() { return PAGE_SIZE; }
27
▶ 28 void NORETURN die() { __builtin_trap(); }
29
30 // We zero-initialize the Extra parameter of map(), make sure this is consistent
接著,您可以使用 --forward
繼續測試:
[zxdb] continue --forward
自動轉送特定類型的例外狀況
zxdb 可以自動將某些例外狀況類型轉送到元件 並將這種情況視為第二次機會例外狀況根據預設,只有頁面錯誤 包含。
偵錯工具的 second-chance-exception
設定包含例外狀況清單
且預設只會做為第二階段處理這項設定包含
例外狀況類型縮寫:
gen
:一般pf
:頁面錯誤ui
:未定義的指示ua
:未對齊存取權
如要進一步瞭解如何處理清單設定,請參閱偵錯工具的 help get
和 help set
。只有部分通知
範例:
如要列出 second-chance-exceptions
目前的值:
[zxdb] get second-chance-exceptions
如何將一般例外狀況類型新增至 second-chance-exceptions
:
[zxdb] set second-chance-exceptions += gen
如要從 second-chance-exceptions
清單中移除網頁錯誤類型:
[zxdb] set second-chance-exceptions -= pf