Инструмент для поиска способов получить экземпляр объекта внутри отладчика? - PullRequest
2 голосов
/ 19 июня 2009

Прямо сейчас я смотрю на ошибку в некотором коде C #, где мне нужно получить данный экземпляр объекта в каком-то месте. Я сижу на точке останова в этом месте в отладчике и могу перепрыгнуть обратно в стек и посмотреть экземпляр объекта, который мне нужно получить. Я подозреваю, что есть способ получить этот экземпляр из того, что у меня есть (foo.bar.baz.bla.bla.bla или что-то в этом роде), но я недостаточно разбираюсь в коде, чтобы знать, как его найти.

Гипотетический пример:

Я сижу в отладчике в строке 2485, где кто-то упрощает код, и понимаю, что программе необходимо прямо здесь установить свойство FooBat для включающего объекта WizBang (то, что выполняет функция 27 шагов) был вызван стек вызовов), но у меня нет прямых ссылок на включающий объект WizBang. Однако я подозреваю, что один из других объектов, к которым у меня есть доступ, имеет доступ к чему-то, что имеет доступ к чему-то, что имеет доступ к включающему объекту WizBang. Но это дает мне около 10 тысяч вещей для просмотра, и, кстати, я также могу получить доступ к 42 различным WizBang объектам, которые мне не нужны, поэтому мне также нужно проверить, что это действительно тот же объект, что и тот, 27 шагов вверх по стеку. Если я могу просто найти способ получить к нему доступ, я могу добавить SomeExp.FooBat = true; прямо здесь, в строке 2485, и закрыть эту ошибку!

Мой вопрос: кто-нибудь создал инструмент, который использует отражение и силу вербовки для поиска цепочек свойств и членов, чтобы найти тот, который даст желаемый экземпляр объекта?

Да, я знаю, что это проблема O(bd) и часто не работает, но это время компьютера, а не время программиста, и когда это работает, это было бы здорово!

p.s. Я даю ему менее чем даже нечетное из того, что я хочу существовать (сейчас <g/>).

Ответы [ 4 ]

2 голосов
/ 09 июля 2009

возможно, вам следует попробовать «Немедленное окно», где вы можете ввести c # live. Он может оценивать только выражения и присваивания (без объявлений и т. Д.).

Вы можете найти непосредственное окно в Debug-> Windows-> Immediate (Ctrl-Alt-I по умолчанию)

Вы уже пробовали это?

0 голосов
/ 09 июля 2009

Я думаю, что вы ищете то, что вы должны написать сами. Тем не менее, я не думаю, что это будет очень сложно - в конце концов, вам просто нужно написать метод, который использует отражение, чтобы обойти любую объектную структуру, с которой вы работаете, проверяя определенное условие. Затем вы просто устанавливаете точку останова (или нажимаете кнопку Пауза), а затем запускаете свой метод для любой структуры объекта, которая вам нужна. Вероятно, вы можете установить метод на [Conditional(DEBUG)], чтобы он не появлялся в версии выпуска вашей программы.

0 голосов
/ 09 июля 2009

Хотя, читая все ваши комментарии и посты, я не уверен, правильно ли я понял, что вы хотите. Вы пробовали условные точки останова в Visual Studio? Они также могут помочь. Вы можете использовать их, чтобы проверить, удовлетворяет ли ваш объект некоторым условиям, и просто остановиться в этом случае.

0 голосов
/ 01 июля 2009

Может быть, вы можете использовать окно наблюдения отладчика visual-studio. Вы можете вставить свой экземпляр один раз и смотреть его каждый шаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...