ICorProfilerInfo::SetILInstrumentedCodeMap — Metoda
Ustawia mapę kodu dla określonej funkcji przy użyciu określonych wpisów mapy języka pośredniego (CIL).
Uwaga
W programie .NET Framework w wersji 2.0 wywołanie elementu SetILInstrumentedCodeMap
FunctionID
reprezentującego funkcję ogólną w określonej domenie aplikacji będzie miało wpływ na wszystkie wystąpienia tej funkcji w domenie aplikacji.
Składnia
HRESULT SetILInstrumentedCodeMap(
[in] FunctionID functionId,
[in] BOOL fStartJit,
[in] ULONG cILMapEntries,
[in, size_is(cILMapEntries)] COR_IL_MAP rgILMapEntries[]);
Parametry
functionId
[in] Identyfikator funkcji, dla której ma być ustawiona mapa kodu.
fStartJit
[in] Wartość logiczna wskazująca, czy wywołanie SetILInstrumentedCodeMap
metody jest pierwszym elementem dla określonego FunctionID
elementu . Ustaw fStartJit
wartość na true
w pierwszym wywołaniu SetILInstrumentedCodeMap
dla danego FunctionID
elementu , a następnie na false
wartość .
cILMapEntries
[in] Liczba elementów w tablicy cILMapEntries
.
rgILMapEntries
[in] Tablica struktur COR_IL_MAP, z których każdy określa przesunięcie CIL.
Uwagi
Profiler często wstawia instrukcje w kodzie źródłowym metody w celu instrumentowania tej metody (na przykład powiadamiania o osiągnięciu danego wiersza źródłowego). SetILInstrumentedCodeMap
umożliwia profilerowi mapowania oryginalnych instrukcji CIL na ich nowe lokalizacje. Profiler może użyć metody ICorProfilerInfo::GetILToNativeMapping , aby uzyskać oryginalne przesunięcie CIL dla danego przesunięcia natywnego.
Debuger przyjmie, że każde stare przesunięcie odnosi się do przesunięcia CIL w oryginalnym, niezmodyfikowanym kodzie CIL i że każde nowe przesunięcie odnosi się do przesunięcia CIL w nowym, instrumentowanym kodzie. Mapa powinna być sortowana w kolejności rosnącej. Aby uzyskać instrukcje dotyczące prawidłowego działania, postępuj zgodnie z następującymi wytycznymi:
Nie zmieniaj kolejności instrumentowanego kodu CIL.
Nie usuwaj oryginalnego kodu CIL.
Uwzględnij wpisy dla wszystkich punktów sekwencji z pliku bazy danych programu (PDB) na mapie. Mapa nie interpoluje brakujących wpisów. Tak więc, biorąc pod uwagę następującą mapę:
(0 stary, 0 nowy)
(5 starych, 10 nowych)
(9 starych, 20 nowych)
Stare przesunięcie 0, 1, 2, 3 lub 4 zostanie zamapowane na nowe przesunięcie 0.
Stare przesunięcie 5, 6, 7 lub 8 zostanie zamapowane na nowe przesunięcie 10.
Stare przesunięcie 9 lub wyższe zostanie zamapowane na nowe przesunięcie 20.
Nowe przesunięcie 0, 1, 2, 3, 4, 5, 6, 7, 8 lub 9 zostanie zamapowane na stare przesunięcie 0.
Nowe przesunięcie 10, 11, 12, 13, 14, 15, 16, 17, 18 lub 19 zostanie zamapowane na stare przesunięcie 5.
Nowe przesunięcie 20 lub wyższe zostanie zamapowane na stare przesunięcie 9.
W programie .NET Framework 3.5 i poprzednich wersjach należy przydzielić tablicę rgILMapEntries
, wywołując metodę CoTaskMemAlloc . Ponieważ środowisko uruchomieniowe przejmuje własność tej pamięci, profiler nie powinien próbować go zwolnić.
Wymagania
Platformy: zobacz Wymagania systemowe.
Nagłówek: CorProf.idl, CorProf.h
Biblioteka: CorGuids.lib
Wersje programu .NET Framework: dostępne od wersji 1.1