При использовании неуправляемого API для .NET Framework для профилирования внутрипроцессного процесса .NET можно ли искать указатель инструкций IL, который соответствует собственному указателю инструкций, предоставленному функции StackSnapshotCallback?
Как очевидно, я делаю снимок текущего стека и хотел бы предоставить информацию о файле и номере строки в дампе стека. Managed Stack Explorer делает это путем запроса ISymUnmanagedMethod::GetSequencePoints
. Это замечательно, но точки последовательности связаны со смещениями, и я до сих пор предполагал, что это смещения с начала метода (на промежуточном языке).
В последующем комментарии к своему сообщению в блоге " ICorDebugCode::GetILToNativeMapping
: основы и не только" Дэвид Броман указывает, что такое сопоставление может быть достигнуто с помощью ICorDebugCode::GetILToNativeMapping
. Однако это не идеально, так как для получения этого интерфейса требуется присоединение к моему процессу другого процесса отладчика.
Я хотел бы избежать этого шага, потому что я хотел бы продолжать иметь возможность запускать свое приложение из отладчика Visual Studio, пока я делаю эти снимки. Это облегчает нажатие на номер строки в окне вывода и переход к соответствующему коду.
Функциональность возможна.... вы можете выплюнуть трассировку стека с нумерацией строк по желанию внутри управляемого кода, единственный вопрос, доступен ли он. Кроме того, я не хочу использовать функциональность System::Diagnostics::StackTrace
или System::Environment::StackTrace
потому что по соображениям производительности мне нужно отложить фактический дамп стека.... таким образом, сохраняя стоимость для разрешения имен методов и местоположения кода на будущее желательно... наряду с возможностью смешивать собственные и управляемые кадры.