程序會建立並使用核心物件執行工作。和記憶一樣 可能洩漏或濫用 (例如釋放後使用),核心物件的控制代碼可能 資訊外洩或遭到濫用 (例如關閉後使用)。
帳號代碼工具
如要協助開發人員診斷處理問題,請使用下方的 handles
工具
是 wlancfg.cm 程序 29831 的樣本:
$ handles 29831
handle koid rkoid rights type
0xa8d44a0f: 29973 0x0000d0ef vmo
0xa8e44aab: 29847 29846 0x0000f00e channel
0xa8d44a0b: 29972 0x0000d0ef vmo
0xa8e42413: 9931 9930 0x0000f00e channel
0xa8d44a07: 29971 0x0000d0ef vmo
0xa8f44a1f: 29969 29970 0x0000f00e channel
0xa8a44a3b: 29964 0x0000d0ef vmo
0xa8d44a17: 29962 29963 0x0000f00e channel
0xa8844a43: 29961 0x0000d0ef vmo
0xa8f44a4b: 29960 0x0000d0ef vmo
0xa8e44a3f: 29959 0x0000d0ef vmo
0xa8e44a23: 29958 0x0000800f port
0xa8f44a2f: 29957 0x0000d0ef vmo
0xa8644a53: 29911 0x0000d0ef vmo
0xa8a44a7f: 29908 0x0000d0ef vmo
0xa8844a6b: 29907 0x0000d0ef vmo
0xa8f44a63: 29906 0x0000d0ef vmo
0xa8844a6f: 29905 0x0000d0ef vmo
0xa8f44a8b: 29904 0x0000d0ef vmo
0xa8944a9f: 29903 0x0000d0ef vmo
0xa8444a83: 29900 0x0000800f vmar
0xa8e44a77: 29845 0x0000d0ef vmo
0xa8f44a8f: 1034 0x0000d0f7 vmo
0xa8d44aa3: 1129 0x0000d00b log
0xa8d44abf: 1129 0x0000d00b log
0xa8d44abb: 1129 0x0000d00b log
0xa8644aef: 29827 29828 0x0000f00e channel
0xa8844ac3: 29826 8711 0x0007dfcf job
0xa8144afb: 29825 29824 0x0000f00e channel
0xa8e44adb: 29816 29817 0x0000f00e channel
0xa8e44ad3: 29776 29777 0x0000f00e channel
0xa894496b: 29766 29767 0x0000f00e channel
0xa8d44a97: 29833 29831 0x0004d2cf thread
0xa8d44a93: 29832 0x0000801f vmar
0xa8d44aaf: 29831 29826 0x0006d3cf process
0xa8f44a73: 29850 0x0000d00b log
0xa8f44af3: 29768 29769 0x0000f00e channel
0xa8e44aa7: 29834 29835 0x0000f00e channel
38 handles
handles <pid>
工具會傾印處理處理常式資料表,其中保留
可在叫用時針對特定程序進行存取控制代碼。
工具會針對每個控點輸出控點值,也就是其物件的 koid。 如果物件有相關物件,就會指向相關的 koid (rkoid) 處理常式和物件型別的權利。
在上述範例中,顯示 38 個不重複的帳號代碼,可對應至 36 個不重複的 物件;3 個控點指向同一個「log」名為 koid 1129 的物件
要注意的是,工具可能不會顯示所有使用中的物件。 舉例來說,即使執行緒沒有開啟的執行緒,仍可以是有效執行緒,且 相關聯的 VMAR 可持續保管 VMO。
handles
工具支援按照物件類型篩選和反向篩選。使用
handles --help
即可查看所有選項。
偵錯工具中的處理常式
您可以使用偵錯工具查看處理資訊。
如要這麼做,請附加至相關程序,並執行 handles
指令。這裡會顯示帳號代碼
值、物件類型和物件 koid:
[zxdb] handles
504103211 ZX_OBJ_TYPE_VMO 27851
504103271 ZX_OBJ_TYPE_VMO 27719
505151859 ZX_OBJ_TYPE_VMO 27720
505151867 ZX_OBJ_TYPE_VMO 27718
506200511 ZX_OBJ_TYPE_PORT 27976
507249163 ZX_OBJ_TYPE_VMAR 27716
508297363 ZX_OBJ_TYPE_VMO 28200
508297379 ZX_OBJ_TYPE_VMO 28187
508297387 ZX_OBJ_TYPE_SOCKET 28189
508297731 ZX_OBJ_TYPE_CLOCK 1263
508297735 ZX_OBJ_TYPE_LOG 1275
508297755 ZX_OBJ_TYPE_LOG 1275
你也可以呼叫 handle
並指定帳號代碼,查看帳號代碼的基本資訊
值:
[zxdb] handle 508302371
Type ZX_OBJ_TYPE_CHANNEL
Value 508302371
Rights ZX_RIGHT_TRANSFER
ZX_RIGHT_READ
ZX_RIGHT_WRITE
ZX_RIGHT_SIGNAL
ZX_RIGHT_SIGNAL_PEER
ZX_RIGHT_WAIT
ZX_RIGHT_INSPECT
Koid 31062
Related koid 31061
如果控制代碼參照的物件與其他物件有關 (例如
或工作的父項) 之後,related_koid
則是該物件的 ID。如果有
如果沒有其他相關物件,這個值為零。在此範例中,相關 koid 是
管道。此關係不可變動:物件的 related_koid
不會變更
相關物件已不存在。
帳號代碼政策有誤
使用關閉後的帳號代碼 或關閉已關閉的帳號代碼 難以診斷錯誤
為了協助開發人員找出這些問題,「不良帳號代碼」工作政策可以 透過 zx_job_set_policy 啟用 符合條件 ZX_POL_BAD_HANDLE 和動作 ZX_POL_ACTION_ALLOW_EXCEPTION.在具有 如果使用此政策,只要使用已關閉的帳號代碼,就會產生例外狀況 如果未處理,系統會終止處理程序,並記錄違規的呼叫堆疊 或可由偵錯工具所攔截 一文,瞭解如何進行互動式疑難排解。