Сейчас я ищу ошибку в коде С#, где мне нужно получить экземпляр данного объекта в определенном месте. Я сижу в точке останова в этом месте в отладчике и могу перепрыгнуть обратно в стек и просмотреть экземпляр объекта, который мне нужно получить. Я подозреваю, что есть способ получить этот экземпляр из того, что у меня есть (foo.bar.baz.bla.bla.bla
или что-то в этом роде), но я недостаточно осведомлен о коде, чтобы узнать, как его найти.
Гипотетический пример:
Я сижу в отладчике на строке 2485, в каком-то одном режиме, и понимает, что программа должна здесь, прямо здесь, установить свойство
FooBat
на охватывающемWizBang
объекте (том, что функция 27 шагов был вызван стек вызовов), но у меня нет прямых ссылок на объектWizBang
. Однако я подозреваю, что у одного из других объектов, к которым у меня есть доступ, есть доступ к тому, что имеет доступ к тому, что имеет доступ к закрывающему объектуWizBang
. Но это дает мне около 10 тыс. Вещей для просмотра, и, кстати, я также могу получить доступ к 42 различным объектамWizBang
, которые не являются тем, который я хочу, поэтому мне также нужно проверить, что это действительно тот же самый объект, что и один 27 поднимает стек. Если я могу просто найти, как получить доступ к нему, я могу добавитьSomeExp.FooBat = true;
прямо здесь, в строке 2485, и закрыть эту ошибку!
Мой вопрос: кто-нибудь создал инструмент, который использует рефлексию и силу для поиска, чтобы найти цепочки свойств и членов, чтобы найти тот, который даст желаемый экземпляр объекта?
Да, я знаю, что это проблема O(b
d
)
и часто не будет работать, но это время компьютера, а не время программиста, и когда оно действительно работает, это было бы фантастически
p.s. Я даю ему меньше, чем даже странное, что я хочу существующего (теперь <g/>
).
Возможно, вам стоит попробовать "Немедленное окно", где вы можете войти в С# live. Он может оценивать только выражения и назначения (без деклараций и т.д.).
Вы можете найти немедленное окно из Debug- > Windows- > Immediate (по умолчанию Ctrl-Alt-I)
Вы уже пробовали это?
Я думаю, что ты за то, что тебе придется писать. Тем не менее, я не думаю, что это очень сложно - ведь вам просто нужно написать метод, который использует отражение, чтобы пересечь любую структуру объектов, с которой вы работаете, проверяя конкретное условие. Затем вы просто устанавливаете точку останова (или нажмите "Пауза" ), а затем запускаете свой метод на любую структуру объектов, в которой вы нуждаетесь. Вероятно, вы можете установить метод [Conditional(DEBUG)]
, чтобы он не отображался в версии версии вашей программы.
Хотя вы читаете все свои комментарии и сообщения, я не уверен, правильно ли я понял, чего вы хотите. Вы пытались использовать условные точки останова в Visual Studio? Они также могут помочь. Вы можете использовать их, чтобы проверить, удовлетворяет ли ваш объект некоторым условиям и просто остановится в этом случае.
Возможно, вы можете использовать часовое окно отладчика visual-studio. Вы можете вставить свой экземпляр один раз и смотреть его на каждом шагу.