Ответ 1
Если DLL находится в .NET, вы можете декомпилировать ее с помощью инструмента, такого как .NET Reflector и затем отлаживать исходный код.
Или вы можете спросить поставщика, доступен ли исходный код. Это, наверное, самый простой способ.
Я использую стороннюю DLL. Для некоторых частных случаев функция в DLL бросает исключение. Можно ли отлаживать DLL в Visual Studio?
После ответа от Andrew Rollings, я могу просмотреть код, но есть ли простой способ отладки кода в Visual Studio?
Если DLL находится в .NET, вы можете декомпилировать ее с помощью инструмента, такого как .NET Reflector и затем отлаживать исходный код.
Или вы можете спросить поставщика, доступен ли исходный код. Это, наверное, самый простой способ.
На основе ответа Andrew вы просто рассматриваете декомпилированный исходный код как новую библиотеку в своем проекте и устанавливаете точки останова в источнике. Удалите все ссылки на стороннюю DLL, чтобы он выполнял декомпилированный код.
Другие вещи:
Есть два метода, с которыми я столкнулся:
1) Доступ к проекту DLL из проекта. Это связано с созданием библиотеки DLL в отдельном экземпляре Visual Studio и последующим доступом к DLL через другой проект в Visual Studio (предполагается, что у вас есть исходный код). Существует несколько способов сделать это:
Trace.WriteLine
заявления в DLL, которые будут показывать
в окне "Выход" в Visual Studio.System.Diagnostics.Debugger.Break()
в DLL-код. когда
запуск вызывающего проекта в Visual Studio,
выполнение программы прекратится.
Отсюда вы можете добавить доступ к
стек вызовов (включая все функции
вызовы в самой DLL) и установить разрывы
(хотя значок для
точка останова будет отключена
и текст наведения для разрыва
точка будет читать "Точка останова будет
в настоящее время не пострадали. Нет символов
были загружены для этого документа ").System.Diagnostics.Debugger.Break()
(см. выше).2) Присоединение процесса использования к проекту DLL. Это связано с подключением отладчика Visual Studio к выполняемому процессу.
Что-то, что сработало для меня с отладкой нескольких сторонних библиотек, а также .NET - WinDbg. Это отвратительный отладчик от Microsoft, который я использовал для устранения некоторых проблемных проблем, которые происходят глубоко внутри фреймворка.
Вам нужно использовать расширения Son of Strike (SOS), если это управляемая DLL. Он также может отлаживать родной. Вам нужно будет немного узнать о вызовах и сборке /инструкции CIL, чтобы использовать его. Вы должны уметь определять исключение и причинять его. Мы использовали WinDbg/SOS, чтобы найти, например, что в HttpWebResponse, если вы используете сжатие Gzip для загрузки страницы, а сервер возвращает плохой заголовок Gzip,.NET запускает декомпрессию в threadpool, и авария выведет ваш процесс. Счастливая отладка.
Как сказал Цезарь Рейес в вопросе о переполнении стека Visual Studio - добавьте исходный код в ссылку, ReSharper 5 (и позже) имеет эту возможность.
Я думал, что .NET Reflector получил несколько отладочных плагинов. Это было бы гораздо лучше, потому что декомпиляция и повторная компиляция кода вообще не выполняются, и вам нужно сделать так много изменений в коде, чтобы исправить это.
Попробуйте отладчик .NET Reflector попробовать. Это может помочь вам.
.NET Reflector 6 поставляется с добавлением Visual Studio, который позволяет использовать пошаговую отладку Visual Studio на сборках, для которых у вас нет исходного кода.
Взгляните на это сообщение в блоге:
http://www.simple-talk.com/community/blogs/alex/archive/2009/09/22/74919.aspx для более подробной информации.
Это еще очень ранняя сборка. Поэтому нет гарантии, что он сработает, и это может привести к нарушению конфигурации вашей визуальной студии или конфигурации проекта. Убедитесь, что у вас есть резервные копии (или источник управления) для любых проектов, которые вы используете.
Скачать здесь: http://www.red-gate.com/MessageBoard/viewforum.php?f=109
Еще один вариант, который мы должны упомянуть здесь, - dotPeek 1.2 (бесплатный декомпилятор от создателей ReSharper). Вот хороший пост, описывающий, как настроить VS-сервер символов и dotPeek 1.2 для отладки декомпилированного кода из VisualStudio: http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program