Не удается увидеть локальные переменные класса при отладке DLL в Visual Studio..?

Я пытаюсь отлаживать DLL, написанную на VB.Net. Когда запускается внешняя программа, она загружает DLL, и все работает нормально... но я не вижу переменные класса на панели Locals. Они отображаются пустыми, как показано ниже.

Кроме того, некоторые строки кода генерируют ошибку «Для текущего местоположения нет доступного исходного кода», но я думаю, что понимаю, почему. Всякий раз, когда он пытается войти в члены класса какой-либо из библиотек Microsoft DLL, у него, конечно же, нет информации для них. Но любые строки, которые имеют дело только с написанным мной кодом, работают нормально.

Не удается увидеть локальные переменные класса при отладке DLL в Visual Studio..?

Это надстройка COM DLL для Microsoft Access 2007, но я предполагаю, что проблема примерно одинакова, независимо от типа DLL. Для начала использовался мастер надстроек Shared COM, а затем настройка продолжалась оттуда с удовлетворительными результатами... за исключением невидимых переменных в окне Locals.

Я новичок в написании и отладке такой DLL; до сих пор я делал только файлы EXE. Я изучил MSDN, Google и Stack Overflow, и вот подробности, о которых спрашивают в других темах...

  • Visual Studio 2008, .Net 3.0 и Access 2007
  • Свойства проекта > Отладка > Внешняя программа указывает на MSAccess.exe.
  • Конфигурация проекта настроена на отладку.
  • Оптимизации = выкл.
  • Создать отладочную информацию = Полная.
  • Файл PDB находится в папке \bin\ с DLL.
  • Точки останова работают.
  • Сообщения Debug.Print работают.

Я копался в реестре и нашел все ссылки на проект, DLL и его пользовательский элемент управления UserControl (требуется, поскольку проект создает CustomTaskPane, а все пути указывают на папку \bin\.

Что я делаю неправильно?

Что я делаю правильно?

Что я могу улучшить?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
253
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Хорошо, отвечая на часть моего собственного вопроса. Я думаю, что исправил сообщение об ошибке «Для текущего местоположения нет доступного исходного кода». В свойствах проекта было включено "Включить отладку неуправляемого кода".

Если эта опция отключена, теперь я могу выполнять код без ошибок, даже если он сталкивается с объектами, для которых у меня нет кода. Отладчик тоже ведет себя немного по-другому, но я еще не зафиксировал его. Я читал о различиях между управляемым и неуправляемым кодом и их отладке в смешанных комбинациях, но хотя я понимаю в принципе, я еще не понимаю на практике.

Однако мои локальные переменные все еще пусты.

Так что на самом деле это не ответ. Избегайте задавать несколько вопросов, шансы, что кто-то знает ответы на все из них, малы.

Hans Passant 29.05.2019 20:34

Да, это ответ на сообщение об ошибке, которое, как я теперь знаю, является только одной проблемой. Но я не знал, что, когда я делал свой ОП, я просто описал группу симптомов, которые, казалось, были связаны с возможной единственной первопричиной. Если никто не может дать полный ответ на весь пост, мой собственный ответ может считаться единственным, даже если он неполный.

spinjector 29.05.2019 22:14
Ответ принят как подходящий

Хорошо, поработав над этим в течение нескольких дней между другими проектами, у меня есть ответ... своего рода. Я думаю, что решение и/или проекты испортились. Я передам все, что смогу, в надежде, что это поможет другим.

Вчера у меня был марафонский сеанс «щелкнуть все», в настройках проекта и «Параметры»> «Отладка», но ничего не помогло. В какой-то момент я перестал возиться с настройками отладки и продолжал работать над кодом, пока не устал и не пошел домой.

Сегодня утром на свежую голову я попробовал еще раз и обнаружил теперь все переменные частного класса были видны. И я не знаю, почему. Кроме того, появилась новая проблема: постоянно появлялась подсказка отладчика Just-In-Time, даже если она не была включена в настройках:

Кроме того, кнопки панели инструментов воспроизведения / остановки / шага становились отключенными, хотя они не должны были быть отключены, но выбор меню для тех же элементов функционировал нормально.

Я еще раз перепроверил все настройки. Я играл со всем и НЕ мог заставить локальные переменные класса снова стать невидимыми и не мог заставить диалог JIT исчезнуть.

Так что я...

  • Сделал копию папки решения.
  • Очистил раствор.
  • Пересобрал решение, включая проект установки.
  • Удалил проект установки из Windows через обозреватель решений.
  • Снова почистил раствор.
  • Удалил файл SUO.
  • Удалил все в \bin\ и \debug.
  • Пересобрал решение, включая проект установки.
  • И все равно проблемы остались.

После приглашения JIT я нажал «Продолжить» (F5) и закрыл MSAccess. После остановки выполнения некоторые панели IDE (такие как Explorer, Locals и т. д.) исчезли, а некоторые переместились в случайные места на экране. Именно тогда я решил, что что-то может быть повреждено, и начал планировать удаление/переустановку всей Visual Studio 2008 с нуля и, возможно, даже нового решения с нуля.

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

Итак, в исходном решении я...

  • Экспортированы настройки из Инструменты > Настройки импорта и экспорта.
  • Сбросить все настройки.
  • Импортировал только что сохраненные настройки.
  • В момент закрытия диалогового окна импорта я получил сообщение об ошибке: «Произошла непредвиденная ошибка».
  • При перезапуске VS IDE я получил диалоговое окно с надписью «Visual Studio настраивает среду для первого использования». Это не звучало хорошо.
  • Пробовал импортировать настройки снова, та же ошибка.
  • Перезагрузил, попробовал импортировать снова, та же ошибка.
  • Закрыл файл решения, попытался снова импортировать настройки без открытия какого-либо решения, и это сработало... или, похоже, сработало.
  • Затем открыл решение... и те же проблемы вернулись.
  • Экспортированы настройки из нового решения.
  • Импортировали эти настройки в исходное решение... и это исправлено..?
  • Ошибки импорта не было, и проект заработал корректно..!!
  • Переменные локального класса были видны, а приглашение JIT исчезло..!!

Итак... Я предполагаю, что что-то было не так в Решении, в одном из Проектов, в настройках IDE или... в чем-то еще. Я надеюсь, что это поможет кому-то другому.

Другие вопросы по теме