ICorProfilerInfo::SetILInstrumentedCodeMap 方法
使用指定的通用中繼語言 (CIL) 對應專案,為指定的函式設定程式代碼對應。
注意
在 .NET Framework 2.0 版中,呼叫 SetILInstrumentedCodeMap
代表 FunctionID
特定應用程式域中泛型函式的 ,會影響應用程式域中該函式的所有實例。
語法
HRESULT SetILInstrumentedCodeMap(
[in] FunctionID functionId,
[in] BOOL fStartJit,
[in] ULONG cILMapEntries,
[in, size_is(cILMapEntries)] COR_IL_MAP rgILMapEntries[]);
參數
functionId
[in]要為其設定程式代碼對應之函式的標識碼。
fStartJit
[in]布林值,指出對 方法的 SetILInstrumentedCodeMap
呼叫是否為特定 FunctionID
的第一個 。 在指定 FunctionID
的第一次呼叫 SetILInstrumentedCodeMap
中,將 設定fStartJit
為 ,然後設定為 false
。true
cILMapEntries
[in] cILMapEntries
陣列中的項目數。
rgILMapEntries
[in]COR_IL_MAP 結構的陣列,每個結構都會指定 CIL 位移。
備註
分析工具通常會在方法的原始程式碼中插入 語句,以檢測該方法(例如,在到達指定的來源行時通知)。 SetILInstrumentedCodeMap
可讓分析工具將原始 CIL 指示對應至其新位置。 分析工具可以使用 ICorProfilerInfo::GetILToNativeMapping 方法來取得指定原生位移的原始 CIL 位移。
調試程式會假設每個舊的位移都是指原始、未修改 CIL 程式代碼內的 CIL 位移,而且每個新位移都參考新檢測程式代碼內的 CIL 位移。 地圖應依遞增順序排序。 若要讓逐步執行正常運作,請遵循下列指導方針:
請勿重新排序已檢測的 CIL 程式代碼。
請勿移除原始 CIL 程式代碼。
在對應中包含來自程式資料庫 (PDB) 檔案之所有序列點的專案。 對應不會插入遺漏的專案。 因此,假設有下列地圖:
(0 老,0 新)
(5歲,10新)
(9歲,20新)
舊的位移為 0、1、2、3 或 4,將會對應至新的位移 0。
5、6、7 或 8 的舊位移將會對應至新的位移 10。
舊位移 9 或更新版本會對應至新的位移 20。
新的位移為 0、1、2、3、4、5、6、7、8 或 9,將會對應至舊的位移 0。
新的位移為 10、11、12、13、14、15、16、17、18 或 19,將會對應至舊的位移 5。
新的位移為 20 或更新版本會對應至舊的位移 9。
在 .NET Framework 3.5 和舊版中,您可以呼叫 CoTaskMemAlloc 方法來配置rgILMapEntries
數位。 因為運行時間會取得此記憶體的擁有權,所以分析工具不應該嘗試釋放它。
需求
平台:請參閱系統需求。
標頭: CorProf.idl、CorProf.h
程式庫:CorGuids.lib
.NET Framework 版本: 自 1.1 起提供