2010-02-02 2 views
0

Я ищу для написания дополнения (или пакета, если необходимо) для Visual Studio 2005, для которого требуется функция типа окна просмотра - оценка выражений и рассмотрение типы. Средства автоматизации обеспечивают Debugger::GetExpression, что достаточно полезно, но информация представлена ​​немного грубо.Оценка выражений с использованием Visual Studio 2005 SDK, а не отладчика автоматизации :: GetExpression

От просмотра документов это звучит как IDebugExpressionContext2 было бы более полезным. С одним из них это выглядит так, как будто я могу получить больше информации из выражения - подробно информацию о типе и любых его элементах и ​​т. Д. И т. Д., Не имея всего, как строки.

Я не могу найти способ получить IDebugExpressionContext2, , хотя! IDebugProgramProvider2 рода выглядит актуальным, в том, что я мог бы начать с IDebugProgramProvider2::GetProviderProcessData и затем медленно бурить вниз до достижения что-то, что может поставить мой контекст выражения - но мне нужно поставить порт для этого, и это не ясно, как для получения порта, соответствующего текущему сеансу отладки . (Даже если бы я пробовал каждый порт, неясно, как сообщить , какой порт является правильным ...)

Я становлюсь подозрительным, что это просто не поддерживается, «Просто пропустил что-то круто очевидное.

Может ли кто-нибудь помочь?

ответ

0

С помощью IDebugExpressionContext вы в конечном итоге получите возможность получить экземпляр IDebugProperty. Этот интерфейс реализуется службой Expression Evaluator. Это, как правило, служба, специфичная для языка. Он предназначен для абстрагирования специфических для языка деталей оценки выражения. Он понимает команды более высокого уровня, такие как «Оценить» и проверку.

Я не думаю, что вы получите то, что ищете, потому что вы не можете получить какой-либо объект типа таким образом. Почти все методы проверки возвращают свои результаты в форме String. Например, вы не получите тип Int32, а вместо него строку «int». Это делает проверку типа невозможной.

Я не верю, что вы пытаетесь использовать поддерживаемый случай. Рассматриваемая система типов не существует в текущем процессе. Он существует в процессе debuggee и довольно трудно получить доступ.

0

Существует хак, который вы можете сделать, чтобы получить дополнительную информацию о типе переменной, которую вы оценили, используя метод Debugger :: GetExpression.

Вы можете оценить «AppDomain.CurrentDomain.GetAssemblies()», чтобы все сборки были загружены в debugee и кэшировали их в вашей надстройке. Вам также может потребоваться прослушивание новых сборок, загружаемых в AppDomain.

Затем выполните следующие действия:

Expression myExpression = Debugger.GetExpression(...); 
Expression typeRefExpression = Debugger.GetExpression("typeof(" + myExpression.Type + ").FullName" 

когда у вас есть TypeFullName, вы можете найти в кэше сборок для согласования System.Type, и как только вы, что вы можете выкопать во все это вам хотите использовать стандартный API Reflection.

Обратите внимание, что это будет работать только на C# из-за его ключевого слова "typeof". Например, вам нужно использовать другое ключевое слово для VB.Net.

+0

Спасибо. Теперь я понимаю, что я не упоминал об этом в вопросе, но это для отладки собственного кода. (Если одни и те же методы работают с управляемым кодом, это хорошо, было бы неплохо также поддержать это.) – 2010-05-31 10:36:49

 Смежные вопросы

  • Нет связанных вопросов^_^