Отладка сторонней DLL в Visual Studio? - PullRequest
16 голосов
/ 08 декабря 2008

Я использую стороннюю DLL. Для некоторых особых случаев функция в DLL вызывает исключение. Можно ли отладить DLL в Visual Studio?

После ответа Эндрю Роллингса я могу просмотреть код, но есть ли простой способ отладки кода в Visual Studio?

Ответы [ 8 ]

17 голосов
/ 08 декабря 2008

Если библиотека DLL на языке .NET , вы можете декомпилировать ее с помощью такого инструмента, как .NET Reflector , а затем выполнить отладку на основе исходного кода.

Или вы можете спросить поставщика, доступен ли исходный код. Это, наверное, самый простой способ.

5 голосов
/ 08 декабря 2008

Опираясь на ответ Эндрю, вы просто рассматриваете декомпилированный исходный код как новую библиотеку в своем проекте и устанавливаете точки останова в исходном коде. Удалите все ссылки на сторонние библиотеки DLL, чтобы выполнялся декомпилированный код.

Другие вещи:

  • Возможно, вы нарушаете закон, декомпилируя код или нарушая лицензионное соглашение со сторонним поставщиком. Обязательно просмотрите это у кого-нибудь.
  • Вы захотите убедиться, что удалили ссылки на декомпилированную версию, если отправляете другим разработчикам или проверяете более крупное дерево исходников. Легко забыть это!
3 голосов
/ 08 декабря 2008

Что-то, что мне помогло с отладкой пары сторонних библиотек, а также .NET - это WinDbg . Это потрясающий отладчик от Microsoft, который я использовал для устранения некоторых проблем, возникающих глубоко внутри фреймворка.

Вам необходимо использовать расширения Son of Strike (SOS), если это управляемая DLL. Это может также отладить нативный. Вам нужно будет немного узнать о командах callstacks и ассемблера / CIL , чтобы хорошо его использовать. Вы должны быть в состоянии определить исключение и причины его возникновения. Мы использовали WinDbg / SOS, чтобы найти, например, что в HttpWebResponse, если вы используете сжатие Gzip для загрузки страницы, а сервер возвращает неверный заголовок Gzip, .NET запускает декомпрессию в пуле потоков, и сбой примет ваш процесс. Удачной отладки.

3 голосов
/ 08 декабря 2008

Есть два метода, с которыми я сталкивался:

1) Доступ к проекту DLL из используемого проекта. Это включает создание библиотеки DLL в отдельном экземпляре Visual Studio и последующий доступ к библиотеке DLL через другой проект в Visual Studio (предполагается, что у вас есть исходный код). Есть несколько способов сделать это:

  • Вы можете добавить Trace.WriteLine заявления в DLL, которые будут показывать в окне «Вывод» в Visual Studio.
  • Вы можете добавить System.Diagnostics.Debugger.Break() операторы к коду DLL. когда запуск вызывающего проекта в Visual Studio, выполнение программы на этом остановится. Отсюда вы можете добавить доступ к стек вызовов (включая все функции звонит в саму DLL) и устанавливает перерыв точки (хотя значок для точка останова будет отключена и парящий текст для перерыва точка будет читать "Точка останова будет в настоящее время не будет поражен. Нет символов были загружены для этого документа ").
  • Если DLL выдает исключение (которое вы можете увидеть из окно «Вывод», если исключение отлавливается и обрабатывается DLL) Вы можете сказать Visual Studio, чтобы всегда ломаться, когда этот тип исключения выбрасывается. Нажмите Ctrl + Alt + E , найдите тип выдается исключение, и нажмите столбец «Бросить» для этого исключение. Отсюда точно как будто ты использовал System.Diagnostics.Debugger.Break() (см. выше).

2) Присоединение процесса использования к проекту DLL. Это включало подключение отладчика Visual Studio к работающему процессу.

  • Откройте проект DLL в Visual Studio.
  • Запустите приложение, которое использует DLL (это приложение не может быть запущено из другой экземпляр Visual Studio, так как процесс уже будет иметь отладчик прикреплен к нему).
  • Отсюда вы можете добавить точки останова и пройти через код DLL, загруженный в Visual Studio (хотя точка останова будет отключена так же, как в методе 1).
1 голос
/ 18 апреля 2014

Еще одна опция, о которой стоит упомянуть, это dotPeek 1.2 (бесплатный декомпилятор от создателей ReSharper). Вот хороший пост, описывающий, как настроить сервер символов VS и dotPeek 1.2 для отладки декомпилированного кода из VisualStudio: http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program

1 голос
/ 23 ноября 2010

Как упомянул Сесар Рейес в вопросе переполнения стека Visual Studio - Прикрепите исходный код к ссылке , ReSharper 5 (и более поздние версии) имеет такую ​​возможность.

0 голосов
/ 29 октября 2009

.NET Reflector 6 поставляется с надстройкой Visual Studio, которая позволяет использовать пошаговую отладку Visual Studio для сборок, для которых у вас нет исходного кода.

Посмотрите на эту запись в блоге:

http://www.simple -talk.com / сообщество / блоги / alex / archive / 2009/09/22 / 74919.aspx для получения более подробной информации.

Это все еще очень ранняя сборка. Так что нет гарантии, что это будет работать, и это может нарушить вашу визуальную студию или конфигурацию проекта. Убедитесь, что у вас есть резервные копии (или контроль исходного кода) для любых проектов, в которых вы используете это.

Скачать здесь: http://www.red -gate.com / ОБЪЯВЛЕНИЯ / viewforum.php? Е = 109

0 голосов
/ 08 декабря 2008

Я думал, что .NET Reflector получил несколько плагинов для отладки. Это было бы намного лучшей идеей, потому что декомпиляция и перекомпиляция кода обычно терпят неудачу, и вам нужно сделать так много изменений в коде, чтобы исправить это.

Попробуйте отладчик .NET Reflector. Это может вам очень помочь.

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