Инструмент для поиска способов получить экземпляр объекта внутри отладчика?

2

Сейчас я ищу ошибку в коде С#, где мне нужно получить экземпляр данного объекта в определенном месте. Я сижу в точке останова в этом месте в отладчике и могу перепрыгнуть обратно в стек и просмотреть экземпляр объекта, который мне нужно получить. Я подозреваю, что есть способ получить этот экземпляр из того, что у меня есть (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/>).

  • 0
    Это немного неясно. Не могли бы вы привести пример?
  • 0
    Я попытался прояснить вопрос, но я не могу придумать лучшего примера, чем уже было в вопросе.
Показать ещё 2 комментария
Теги:
reflection

4 ответа

2

Возможно, вам стоит попробовать "Немедленное окно", где вы можете войти в С# live. Он может оценивать только выражения и назначения (без деклараций и т.д.).

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

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

  • 0
    Это позволяет мне проверять, ЕСЛИ выражение дает мне то, что я хочу, но, тем не менее, оно заставляет меня вручную искать варианты.
0

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

  • 0
    Это было бы весьма ограниченным, специальным решением для того, что я хочу (ОТО, вы, кажется, первый человек, который получает мой вопрос <g>). Я хотел бы увидеть инструмент, который делает это, но я не настолько заинтересован, чтобы написать его сам.
0

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

0

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

  • 0
    См. Мой комментарий к вопросу: мне нужно выражение, которое я могу редактировать в своем коде. Этот вопрос связан с сеансом отладки, где я понял, что для исправления ошибки мне нужно было использовать объект, который при помощи отладчика я мог видеть в другом кадре стека, но не мог понять, как получить доступ с места где мне это было нужно
  • 0
    Вы можете изменять объекты в окне просмотра VS. Кроме того, вы, кажется, сомневаетесь в Reflection. Вы можете захватить почти все с помощью Reflection.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню