Я создаю .Net Profiler для некоторых пользовательских требований, где мне нужно захватить детали исключения, даже если это было правильно обработано в коде.
Для этого
Пока все хорошо, я получаю обратный вызов за каждое выбрасываемое исключение. Тем не менее, он дает OjbectID, который является указателем на фактический объект исключения. Я хочу больше подробностей, таких как сообщение, стек вызовов и т. Д. Об исключении.
Как получить информацию об объекте из ObjectID?
Как упомянул @HansPassant, то, что вы делаете, больше напоминает функцию отладчика, чем профилировщик. Тем не менее, вы можете делать то, что вы хотите, используя профилировщик, если это жесткое требование — я считаю, что переписывание IL возможно через ICorDebug
интерфейсы, но я разработчик профилировщик и не так часто использовал интерфейсы отладчика.
Блог Дэвида Бромана имеет отличное описание взятия управляемого стека с использованием ICorProfilerInfo2
интерфейс. Для того, чтобы получить родные части, вам нужно сделать гораздо больше работы.
Навигация по экземпляру объекта также осуществляется через ICorProfilerInfo2
интерфейс.
Получить идентификатор класса объекта с помощью ICorProfilerInfo::GetClassFromObject()
Используя идентификатор класса, вы получите макет класса через ICorProfilerInfo2::GetClassLayout()
Индекс в объект, чтобы получить нужные данные.
Других решений пока нет …