DkmNativeInstructionSymbol Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
DkmNativeInstructionSymbol reprezentuje instrukcję natywną w module procesu docelowego. DkmNativeInstructionSymbol to 1:1 z podstawowymi instrukcjami natywnymi. Jeśli więc istnieją dwa wystąpienia szablonów metody (np. MyMethod CString> i MyMethod<<int>), jeśli konsolidator scala dwa wystąpienia w jedną funkcję za pomocą składania COMDAT, metody będą identyczne. Jeśli konsolidator nie może scalić dwóch wystąpień, oba funkcje na poziomie użytkownika będą wyświetlane jako jeden DkmNativeInstructionSymbol.
public ref class DkmNativeInstructionSymbol : Microsoft::VisualStudio::Debugger::Symbols::DkmInstructionSymbol
[Windows::Foundation::Metadata::WebHostHidden]
public ref class DkmNativeInstructionSymbol : Microsoft::VisualStudio::Debugger::Symbols::DkmInstructionSymbol
[Windows::Foundation::Metadata::WebHostHidden]
class DkmNativeInstructionSymbol : Microsoft::VisualStudio::Debugger::Symbols::DkmInstructionSymbol
[System.Runtime.InteropServices.Guid("0eb834ca-c591-449c-66ad-e016093977d2")]
public class DkmNativeInstructionSymbol : Microsoft.VisualStudio.Debugger.Symbols.DkmInstructionSymbol
[<System.Runtime.InteropServices.Guid("0eb834ca-c591-449c-66ad-e016093977d2")>]
type DkmNativeInstructionSymbol = class
inherit DkmInstructionSymbol
Public Class DkmNativeInstructionSymbol
Inherits DkmInstructionSymbol
- Dziedziczenie
- Atrybuty
Właściwości
Module |
Klasa DkmModule reprezentuje pakiet kodu (np. dll lub exe), który jest lub raz został załadowany do co najmniej jednego procesu. Klasa DkmModule jest centralnym obiektem interfejsów API symboli i jest 1:1 z notacją programu obsługi symboli tego, co jest ładowane. Jeśli pakiet kodu jest ładowany do trzech różnych procesów (lub tego samego procesu, ale z trzema różnymi adresami podstawowymi lub trzema różnymi domenami aplikacji), ale program obsługi symboli uważa wszystkie te procesy za identyczne, będzie tylko jeden obiekt modułu. (Odziedziczone po DkmInstructionSymbol) |
RuntimeType |
Identyfikator środowiska uruchomieniowego identyfikuje środowisko wykonywania dla określonego fragmentu kodu. Identyfikatory środowiska uruchomieniowego są używane przez dyspozytora, aby zdecydować, do którego monitora ma być wysyłane. Należy pamiętać, że kolejność identyfikatora środowiska uruchomieniowego identyfikatora Guids jest nieco znacząca, ponieważ określa to, które środowisko uruchomieniowe pobiera pierwszy strzał podczas arbitrażu. W związku z tym, jeśli chcesz zadeklarować nowe wystąpienie środowiska uruchomieniowego, które jest zbudowane na clR, identyfikator środowiska uruchomieniowego powinien być mniejszy niż DkmRuntimeId.Clr. (Odziedziczone po DkmInstructionSymbol) |
RVA |
RVA instrukcjipointer w module. |
TagValue |
DkmInstructionSymbol jest abstrakcyjną klasą bazową. To wyliczenie wskazuje, której klasy pochodnej ten obiekt jest wystąpieniem. (Odziedziczone po DkmInstructionSymbol) |
Metody
Bind(DkmModuleInstance) |
Tworzy powiązanie symbolu instrukcji z konkretnym wystąpieniem modułu. Symbol instrukcji jest połączony z modułem DkmModule, a nie elementem DkmModuleInstance, więc nie jest powiązany z określonym procesem, domeną aplikacji lub adresem podstawowym modułu. (Odziedziczone po DkmInstructionSymbol) |
Create(DkmModule, UInt32) |
Twórca nowe wystąpienie obiektu DkmNativeInstructionSymbol. |
GetAlternateSourcePosition(DkmSourcePositionFlags) |
Zwraca alternatywne położenie pliku źródłowego (np. example.cs, wiersz 12) dla tego symbolu instrukcji. Jest to obecnie używane w scenariuszach mapy źródłowej w celu zwrócenia oryginalnej (niezamapowanej) lokalizacji źródłowej. Ten interfejs API będzie wywoływany przez interfejs użytkownika debugera w przypadkach, gdy nie można odnaleźć podstawowej lokalizacji źródłowej. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 12 Update 3 (DkmApiVersion.VS12Update3). (Odziedziczone po DkmInstructionSymbol) |
GetBasicInfo(DkmWorkList, DkmModuleInstance, DkmBasicSymbolInfoRequestFlags, DkmCompletionRoutine<DkmGetBasicSymbolInfoAsyncResult>) |
Asynchronicznie oblicza podstawowe informacje o symbolach dla danego elementu DkmInstructionSymbol. Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 16 RTM (DkmApiVersion.VS16RTMPreview). (Odziedziczone po DkmInstructionSymbol) |
GetCompilerId(DkmInspectionSession) |
Zwraca identyfikator kompilatora (LanguageId/VendorId) danego symbolu. W przypadku czytnika plików PDB firmy Microsoft, jeśli plik PDB został utworzony przez kompilator, który używał elementu ISymUnmanagedWriter, czytnik pdB będzie mógł określić poprawną wartość DkmCompilerId z pary LanguageId/VendorId przekazanej z elementu ISymUnmanagedWriter.DefineDocument. Jeśli plik PDB został utworzony przez kompilator, który nie używał elementu ISymUnmanagedWriter, czytnik pdB może być w stanie uzyskać identyfikator DkmCompilerId z rekordów PDB S_COMPILE*. Aby to zadziałało, kompilator musi najpierw emitować rekord S_COMPILE* dla każdego compilandu. Kompilator musi mieć pewność, że poprawnie wypełni wartość wyliczenia języka i ciąg kompilatora. Kompilator powinien upewnić się, że ciąg kompilatora jest wystarczająco specyficzny do użycia do wybierania ewaluatora wyrażeń; zaleca się dołączenie nazwy firmy. Po emitowaniu pary wyliczenia/nazwy instalator ewaluatora wyrażeń powinien następnie zarejestrować tę parę z debugerem. W tym celu ewaluator wyrażeń powinien ustawić ten klucz rejestru: %VSRegistryRoot%\Debugger\CodeView Compilers%CodeViewLanguageCode%:%CompilerName% i zdefiniować identyfikator VendorId/LanguageId. (Odziedziczone po DkmInstructionSymbol) |
GetCompilerId(DkmWorkList, DkmInspectionSession, DkmCompletionRoutine<DkmGetCompilerIdAsyncResult>) |
Zwraca identyfikator kompilatora (LanguageId/VendorId) danego symbolu. W przypadku czytnika plików PDB firmy Microsoft, jeśli plik PDB został utworzony przez kompilator, który używał elementu ISymUnmanagedWriter, czytnik pdB będzie mógł określić poprawną wartość DkmCompilerId z pary LanguageId/VendorId przekazanej z elementu ISymUnmanagedWriter.DefineDocument. Jeśli plik PDB został utworzony przez kompilator, który nie używał elementu ISymUnmanagedWriter, czytnik pdB może być w stanie uzyskać identyfikator DkmCompilerId z rekordów PDB S_COMPILE*. Aby to zadziałało, kompilator musi najpierw emitować rekord S_COMPILE* dla każdego compilandu. Kompilator musi mieć pewność, że poprawnie wypełni wartość wyliczenia języka i ciąg kompilatora. Kompilator powinien upewnić się, że ciąg kompilatora jest wystarczająco specyficzny do użycia do wybierania ewaluatora wyrażeń; zaleca się dołączenie nazwy firmy. Po emitowaniu pary wyliczenia/nazwy instalator ewaluatora wyrażeń powinien następnie zarejestrować tę parę z debugerem. W tym celu ewaluator wyrażeń powinien ustawić ten klucz rejestru: %VSRegistryRoot%\Debugger\CodeView Compilers%CodeViewLanguageCode%:%CompilerName% i zdefiniować identyfikator VendorId/LanguageId. Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 16 RTM (DkmApiVersion.VS16RTMPreview). (Odziedziczone po DkmInstructionSymbol) |
GetCurrentStatementRange() |
Ta metoda zwraca zakres przesunięcia IL, który zawiera bieżące przesunięcie IL, jak określono w adresie instrukcji. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetDisassemblyLabel(DkmInspectionSession) |
Zwróć nazwę symbolu, jak powinien być wyświetlany w oknie dezasemblacji. W przypadku kodu Microsoft C++ jest to oparte na nazwie symbolu publicznego. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetEmbeddedDocument() |
Zwraca osadzony dokument zawierający ten symbol. Zwraca S_FALSE, jeśli osadzony dokument nie istnieje. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 15 Update 5 (DkmApiVersion.VS15Update5). (Odziedziczone po DkmInstructionSymbol) |
GetGPUInstructionMetadataCallback(DkmInstructionAddress, DkmInstructionSymbol) |
Ta metoda zwraca informacje o adresie do monitora debugowania procesora GPU. (Odziedziczone po DkmInstructionSymbol) |
GetInlineFramesCount(DkmBasicSymbolInfoRequestFlags) |
Zwraca liczbę ramek wbudowanych w podany symbol instrukcji. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 16 RTM (DkmApiVersion.VS16RTMPreview). (Odziedziczone po DkmInstructionSymbol) |
GetInlineFramesCount(DkmWorkList, DkmBasicSymbolInfoRequestFlags, DkmCompletionRoutine<DkmGetInlineFramesCountAsyncResult>) |
Zwraca liczbę ramek wbudowanych w podany symbol instrukcji. Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 16 RTM (DkmApiVersion.VS16RTMPreview). (Odziedziczone po DkmInstructionSymbol) |
GetInlineSourcePosition(DkmStackWalkFrame, Boolean) |
Zwraca pozycję pliku źródłowego (np. example.cs, wiersz 12) tego symbolu instrukcji pod określonym wbudowanym numerem ramki. Jeśli ten symbol instrukcji nie jest skojarzony z plikiem źródłowym, zwracana jest wartość null (S_FALSE zwracany jest kod natywny). Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 15 RTM (DkmApiVersion.VS15RTM). (Odziedziczone po DkmInstructionSymbol) |
GetInlineSourcePosition(DkmWorkList, DkmStackWalkFrame, DkmCompletionRoutine<DkmGetInlineSourcePositionAsyncResult>) |
Zwraca pozycję pliku źródłowego (np. example.cs, wiersz 12) tego symbolu instrukcji pod określonym wbudowanym numerem ramki. Jeśli ten symbol instrukcji nie jest skojarzony z plikiem źródłowym, zwracana jest wartość null (S_FALSE zwracany jest kod natywny). Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 15 RTM (DkmApiVersion.VS15RTM). (Odziedziczone po DkmInstructionSymbol) |
GetNativeInstructionMetadataCallback(DkmInstructionAddress) |
Zwraca informacje o adresie do natywnego monitora debugowania. |
GetNoSourceRanges() |
Wysyła zapytanie do dostawcy symboli w celu określenia zakresów instrukcji, które nie odpowiadają żadnym instrukcjom źródłowym użytkownika i są używane przez podstawowy monitor debugowania, aby zawsze przechodzić przez proces wykonywania kroków. (Odziedziczone po DkmInstructionSymbol) |
GetSourcePosition(DkmSourcePositionFlags, DkmInspectionSession, Boolean) |
Zwraca pozycję pliku źródłowego (np. example.cs, wiersz 12) tego symbolu instrukcji. Jeśli ten symbol instrukcji nie jest skojarzony z plikiem źródłowym, zwracana jest wartość null (S_FALSE zwracany jest kod natywny). Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetSourcePosition(DkmWorkList, DkmSourcePositionFlags, DkmInspectionSession, DkmCompletionRoutine<DkmGetSourcePositionAsyncResult>) |
Zwraca pozycję pliku źródłowego (np. example.cs, wiersz 12) tego symbolu instrukcji. Jeśli ten symbol instrukcji nie jest skojarzony z plikiem źródłowym, zwracana jest wartość null (S_FALSE zwracany jest kod natywny). Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetSourcePositionCallback(DkmSourcePositionFlags, DkmInspectionSession, Boolean) |
Zwraca położenie pliku źródłowego (np. example.cs, wiersz 12) tego symbolu instrukcji. Jeśli ten symbol instrukcji nie jest skojarzony z plikiem źródłowym, zwracany jest wartość null (S_FALSE zwracany kod w języku natywnym). Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetSourcePositionCallback(DkmWorkList, DkmSourcePositionFlags, DkmInspectionSession, DkmCompletionRoutine<DkmGetSourcePositionCallbackAsyncResult>) |
Zwraca pozycję pliku źródłowego (np. example.cs, wiersz 12) tego symbolu instrukcji. Jeśli ten symbol instrukcji nie jest skojarzony z plikiem źródłowym, zwracany jest wartość null (S_FALSE zwracany kod w języku natywnym). Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę ukończenia. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetSteppingNativeInstructionMetadata(DkmModuleInstance, DkmInstructionAddress) |
Wywoływana przez natywną dm dm pobiera dane dotyczące instrukcji, która służy do decydowania o tym, jak ta instrukcja powinna być schodkowa. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 14 RTM (DkmApiVersion.VS14RTM). |
GetSteppingRanges(DkmModuleInstance, DkmInstructionAddress, DkmSteppingRangeBoundary, Boolean) |
Wysyła zapytanie do dostawcy symboli, aby określić zakresy instrukcji, które podstawowy monitor debugowania powinien przejść w celu zaimplementowania kroku. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 14 RTM (DkmApiVersion.VS14RTM). |
GetSteppingRanges(DkmSteppingRangeBoundary, Boolean) |
Wysyła zapytanie do dostawcy symboli, aby określić zakresy instrukcji, które podstawowy monitor debugowania powinien przejść do wdrożenia kroku. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetSteppingRanges(DkmWorkList, DkmModuleInstance, DkmInstructionAddress, DkmSteppingRangeBoundary, Boolean, DkmCompletionRoutine<DkmGetSteppingRangesAsyncResult>) |
Wysyła zapytanie do dostawcy symboli, aby określić zakresy instrukcji, które podstawowy monitor debugowania powinien przejść w celu zaimplementowania kroku. Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę uzupełniania. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 14 RTM (DkmApiVersion.VS14RTM). |
GetSteppingRanges(DkmWorkList, DkmSteppingRangeBoundary, Boolean, DkmCompletionRoutine<DkmGetSteppingRangesAsyncResult>) |
Wysyła zapytanie do dostawcy symboli, aby określić zakresy instrukcji, które podstawowy monitor debugowania powinien przejść do wdrożenia kroku. Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę ukończenia. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetUserCodeSourcePositionCallback(DkmInspectionSession) |
Zwraca położenie pliku źródłowego (np. example.cs, wiersz 12) tego symbolu instrukcji. Jeśli ten symbol instrukcji nie jest skojarzony z plikiem źródłowym lub nie jest w kodzie użytkownika, zwracany jest wartość null (E_INSTRUCTION_NO_SOURCE zwracany kod). Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
GetUserCodeSourcePositionCallback(DkmWorkList, DkmInspectionSession, DkmCompletionRoutine<DkmGetUserCodeSourcePositionCallbackAsyncResult>) |
Zwraca położenie pliku źródłowego (np. example.cs, wiersz 12) tego symbolu instrukcji. Jeśli ten symbol instrukcji nie jest skojarzony z plikiem źródłowym lub nie jest w kodzie użytkownika, zwracany jest wartość null (E_INSTRUCTION_NO_SOURCE zwracany kod). Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę ukończenia. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika Monitor (poziom < składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |
HasEmbeddedDocument() |
Sprawdza, czy dany symbol ma osadzony dokument. Dokumenty osadzone są wtedy, gdy plik źródłowy (np. main.cs) jest osadzony wewnątrz pliku symboli (np. example.pdb). Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). Ten interfejs API został wprowadzony w programie Visual Studio 15 Update 8 (DkmApiVersion.VS15Update8). (Odziedziczone po DkmInstructionSymbol) |
HasLineInfo() |
Wysyła zapytanie do dostawcy symboli, aby określić, czy mamy informacje o wierszu. Służy do monitorowania debugowania, aby zdecydować, czy lokalizacja może być uznawana za kod użytkownika. Ograniczenie lokalizacji: w przypadku zwykłych symboli można wywołać z dowolnego składnika. W przypadku symboli dynamicznych można wywołać tylko po stronie serwera. (Odziedziczone po DkmInstructionSymbol) |
HasLineInfo(DkmWorkList, DkmCompletionRoutine<DkmHasLineInfoAsyncResult>) |
Wysyła zapytanie do dostawcy symboli, aby określić, czy mamy informacje o wierszu. Służy do monitorowania debugowania, aby zdecydować, czy lokalizacja może być uznawana za kod użytkownika. Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę ukończenia. Ograniczenie lokalizacji: w przypadku zwykłych symboli można wywołać z dowolnego składnika. W przypadku symboli dynamicznych można wywołać tylko po stronie serwera. (Odziedziczone po DkmInstructionSymbol) |
IsHiddenCode(DkmWorkList, DkmInspectionSession, DkmInstructionAddress, DkmCompletionRoutine<DkmIsHiddenCodeAsyncResult>) |
Zwraca wartość , jeśli ten symbol instrukcji znajduje się w ukrytym kodzie. Na przykład w kodzie zarządzanym numer wiersza 0xfeefee oznacza linię źródłową jako ukrytą. Ta metoda dołączy nowy element roboczy do określonej listy roboczej i powróci po dołączeniu elementu roboczego. Rzeczywiste przetwarzanie elementu roboczego jest asynchroniczne. Obiekt wywołujący zostanie powiadomiony, że żądanie zostało ukończone przez procedurę ukończenia. Ograniczenie lokalizacji: interfejs API musi być wywoływany ze składnika IDE (poziom > składnika 100 000). (Odziedziczone po DkmInstructionSymbol) |