Teilen über


ICorProfilerInfo::SetILInstrumentedCodeMap-Methode

Legt eine Codezuordnung für die angegebene Funktion mithilfe der angegebenen CIL-Zuordnungseinträge (Common Intermediate Language) fest.

Hinweis

In Version 2.0 von .NET Framework wirkt sich das Aufrufen von SetILInstrumentedCodeMap für eine Funktions-ID (FunctionID), die eine generische Funktion in einer bestimmten Anwendungsdomäne darstellt, auf alle Instanzen dieser Funktion in der Anwendungsdomäne aus.

Syntax

HRESULT SetILInstrumentedCodeMap(
    [in]  FunctionID functionId,
    [in]  BOOL       fStartJit,
    [in]  ULONG      cILMapEntries,
    [in, size_is(cILMapEntries)] COR_IL_MAP rgILMapEntries[]);

Parameter

functionId
[in] Die ID der Funktion, für die die Codezuordnung festgelegt werden soll.

fStartJit
[in] Ein boolescher Wert, der angibt, ob der Aufruf der SetILInstrumentedCodeMap-Methode der erste Aufruf für eine bestimmte Funktions-ID (FunctionID) ist. Im ersten Aufruf von SetILInstrumentedCodeMap für eine bestimmte Funktions-ID (FunctionID) muss fStartJit auf true festgelegt werden (danach auf false).

cILMapEntries
[in] Die Anzahl von Elementen im cILMapEntries-Array.

rgILMapEntries
[in] Ein Array von COR_IL_MAP Strukturen, die jeweils einen CIL-Offset angeben.

Hinweise

Ein Profiler fügt häufig Anweisungen in den Quellcode einer Methode ein, um diese Methode zu instrumentieren (etwa, um darüber zu informieren, dass eine bestimmte Quellzeile erreicht wurde). SetILInstrumentedCodeMap ermöglicht es einem Profiler, die ursprünglichen CIL-Anweisungen ihren neuen Speicherorten zuzuordnen. Ein Profiler kann die ICorProfilerInfo::GetILToNativeMapping-Methode verwenden, um den ursprünglichen CIL-Offset für einen bestimmten nativen Offset abzurufen.

Der Debugger geht davon aus, dass jeder alte Offset auf einen CIL-Offset im ursprünglichen, unveränderten CIL-Code verweist und dass jeder neue Offset auf den CIL-Offset im neuen instrumentierten Code verweist. Die Zuordnung muss aufsteigend sortiert sein. Halten Sie sich an folgende Richtlinien, damit die schrittweise Ausführung ordnungsgemäß funktioniert:

  • Ordnen Sie den instrumentierten CIL-Code nicht neu an.

  • Entfernen Sie nicht den ursprünglichen CIL-Code.

  • Schließen Sie Einträge für alle Sequenzpunkte aus der PDB-Datei (Programmdatenbank) in die Zuordnung ein. Fehlende Einträge werden von der Zuordnung nicht interpoliert. Betrachten Sie die folgende Zuordnung:

    (0 alt, 0 neu)

    (5 alt, 10 neu)

    (9 alt, 20 neu)

    • Der alte Offset 0, 1, 2, 3 oder 4 wird dem neuen Offset 0 zugeordnet.

    • Der alte Offset 5, 6, 7 oder 8 wird dem neuen Offset 10 zugeordnet.

    • Der alte Offset 9 oder höher wird dem neuen Offset 20 zugeordnet.

    • Der neue Offset 0, 1, 2, 3, 4, 5, 6, 7, 8 oder 9 wird dem alten Offset 0 zugeordnet.

    • Der neue Offset 10, 11, 12, 13, 14, 15, 16, 17, 18 oder 19 wird dem alten Offset 5 zugeordnet.

    • Der neue Offset 20 oder höher wird dem alten Offset 9 zugeordnet.

Bis .NET Framework 3.5 wird das rgILMapEntries-Array durch Aufrufen der CoTaskMemAlloc-Methode zugeordnet. Da die Runtime den Besitz dieses Arbeitsspeichers übernimmt, darf der Profiler nicht versuchen, ihn freizugeben.

Anforderungen

Plattformen: Informationen finden Sie unter Systemanforderungen.

Header: CorProf.idl, CorProf.h

Bibliothek: CorGuids.lib

.NET Framework-Versionen: Seit Version 1.1 verfügbar

Siehe auch