自訂的 .NET 除錯器通常託管在獨立的程序中。 行動平台限制或禁止建立此類程序,因此目標端的自訂除錯器元件必須載入應用程式程序中。
本文僅適用於行動平台(iOS 和 Android)在 .NET 11 及更新版本中的除錯器初始化。 這不適用於 NativeAOT。
實作並部署目標端元件
目標端除錯器元件應實作為帶有 DllGetClassObject 入口點的剖析器動態函式庫。 例如實作範例,請參見 .NET 剖面器範例。
它應與 libmscordbi 及 libmscordaccore 動態函式庫一同部署,作為應用程式的一部分,並符合目標平台原生函式庫的打包、程式碼簽章及載入要求。
啟動時載入目標端元件
要讓 CoreCLR 將你的元件載入為效能分析器,請在執行時開始前提供以下環境設定:
| 環境變數 | 價值 |
|---|---|
DOTNET_ENABLE_PROFILING |
1 |
DOTNET_PROFILER |
{<profiler-CLSID>} |
DOTNET_PROFILER_PATH |
<component-path> |
將 <profiler-CLSID> 取代為您的元件分析工具 GUID,並保留外層的大括號。 用目標應用程式部署中原生元件的路徑取代 <component-path> 。
關於這些設定的詳細資訊,請參閱 執行時除錯與剖析的配置選項。
請使用你平台的應用程式啟動設定來提供這些設定。
Note
雖然此程序利用分析器機制初始化除錯器,但並未建立行動平台對第三方分析器的通用支援。
建立除錯器介面
在目標端元件中,執行以下初始化:
- 載入
libmscordbi動態函式庫並呼叫其CoreCLRCreateCordbObjectEx匯出項目。 查詢回傳的物件以取得ICorDebug。 - 呼叫 ICorDebug::Initialize,並用 ICorDebug::SetManagedHandler 註冊你的 managed-event handler。
- 用 ICorDebug::D ebugActiveProcess 連接應用程式。
為避免錯過早期模組載入和啟動事件,應將附加作業與執行階段啟動加以協調,讓受控執行在 DebugActiveProcess 完成之前不會繼續進行。
初始化後,使用 ICorDebug 除錯器介面,與其他 Unix 平台相同。