如何在行動平台上初始化自訂除錯器

自訂的 .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

雖然此程序利用分析器機制初始化除錯器,但並未建立行動平台對第三方分析器的通用支援。

建立除錯器介面

在目標端元件中,執行以下初始化:

  1. 載入 libmscordbi 動態函式庫並呼叫其 CoreCLRCreateCordbObjectEx 匯出項目。 查詢回傳的物件以取得 ICorDebug。
  2. 呼叫 ICorDebug::Initialize,並用 ICorDebug::SetManagedHandler 註冊你的 managed-event handler。
  3. 用 ICorDebug::D ebugActiveProcess 連接應用程式。

為避免錯過早期模組載入和啟動事件,應將附加作業與執行階段啟動加以協調,讓受控執行在 DebugActiveProcess 完成之前不會繼續進行。

初始化後,使用 ICorDebug 除錯器介面,與其他 Unix 平台相同。