Как мне взаимодействовать с нативным отладчиком Visual Studios при написании собственного отладчика в "смешанном режиме"?
Последние несколько дней я проводил в поисках Google, блогов и MSDN в поисках небольшого куска информации о том, как отладка "взаимодействия" или "смешанного режима" реализована в Visual Studio.
Я пытаюсь реализовать свой собственный отладчик для пользовательской виртуальной машины (на самом деле, он получает JIT-ed для собственного кода, что означает, что мне придется перестраивать стеки вызовов для обычного собственного отладчика всякий раз, когда он вводит код JIT-ed), но Я не могу найти никакой информации о том, как вы на самом деле можете взаимодействовать с нативным отладчиком VS и выполнять причудливые "нативные / управляемые" переходы, которые выполняет отладка смешанного режима VS.
До сих пор я нашел несколько вещей, которые предоставляют полезные лакомые кусочки, но их недостаточно для реального взаимодействия с отладчиком. Лучшие, самые полезные статьи, которые я нашел:
- Различные посты Майка Сталла в блоге (в основном эти два), хотя они предоставляют полезную информацию и проблески внутренней работы, похоже, очень тесно связаны с отладкой.Net.
- MSDN Создание Basic Debugger дает хороший обзор того, как MS реализует свои отладчики и как вы можете внедрить один в том же техническом стеке. К сожалению, это не дает никакой реальной информации о том, как передавать данные в собственный отладчик VS. (В сочетании с блогами Майка Сталла кажется, что оба отладчика будут ожидать одних и тех же событий, так как же вы на самом деле эффективно объединяете результаты?)
- Документация по API отладчика (также известная как DbgEng). Я обнаружил это, запустив Dependency Walker на собственном отладочном движке VS (NatDbgDE.dll, похоже, он экспортирует функцию DebugCreate, которую я смог найти только в этой документации, чтобы она могла быть связана). К сожалению, у меня был очень небольшой успех даже в выполнении какой-либо отладки через это, и это, кажется, плохо документировано, хотя документация действительно указывает на то, что я, вероятно, захочу разобраться в конце. В нем также не говорится, как я могу работать совместно с другим отладчиком, и не упоминается отладчик VS, так что в любом случае я могу пойти по этому пути совершенно неверно.
Как начать писать отладчик, который будет работать совместно с нативным отладчиком VS?
Спасибо!
1 ответ
Боюсь, на эту тему не так много документации. Ресурсы, о которых вы упоминаете, на данный момент довольно старые. Мое предложение заключается в интеграции с более новым отладочным движком Visual Studio (Concord). Concord используется в качестве механизма отладки для собственной отладки от Visual Studio 2012 вперед и для всей отладки в Visual Studio 2013 вперед. Одной из целей разработки Concord было упрощение отладки в смешанном режиме. Это также разработано, чтобы быть легко растяжимым.
Я создал некоторую документацию по расширяемости Concord, которая может помочь. Он в основном сфокусирован на оценщиках выражений, но содержит некоторую полезную информацию для начала работы с Concord. Еще один полезный ресурс - это исходный код отладчика на основе Concord в Python Tools for Visual Studio. Это полная реализация отладчика смешанного режима, который интегрируется с Concord и позволяет выполнять отладку смешанного режима с Python.