2016-04-12 2 views
2

Я работаю с конкретным приложением, которое поддерживает «расширения» как управляемые C# DLL. Само приложение является родным приложением, и у меня нет исходного кода для него.Отладка управляемой DLL, загружаемой собственным приложением в Visual Studio 2015

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

Мне кажется, что Visual Studio Debugger не распознает мой управляемый код C#, хотя DLL явно используется. Например, если я просматриваю представление «Модули», я не вижу свою DLL в списке.

Чтение через некоторые страницы поддержки Visual Studio, похоже, что существует «смешанный режим», который я обычно включаю в проект запущенного приложения. Однако, поскольку я фактически не создаю приложение, я не могу изменить этот параметр.

Кто-нибудь знает, есть ли другой способ достичь этого?

ответ

0

Visual studio будет иметь вашу DLL в списке, если он загружен, а программа использует обычную среду выполнения .net. Если он использует что-то доработанное или моно, например, то оно может и не быть.

Я не думаю, что у вас нет источника для неуправляемой программы. «Смешанный режим» - это не то, что вы задали в проекте. Это то, что вы установили для VS, чтобы узнать, какой режим отладки использовать при запуске проекта из VS. Вы можете выбрать еще больше вариантов при подключении к процессу, и вот что важно для вас здесь.

Я использовал этот проект, чтобы проверить теорию: https://code.msdn.microsoft.com/windowsdesktop/CppHostCLR-e6581ee0

Я построил режим выпуска и удалил PDB и был в состоянии поразить контрольную точку в CSClassLibrary (в static int GetStringLength) с помощью VS2015 вручную, выбирая тип отладчика при креплении к процессу.

Если вы позволили ему автоматически выбрать, и у вас возникли проблемы с синхронизацией (прикрепите vs .net startup vs dll load), тогда .net не может быть запущен, когда вы подключаетесь, и он не знал бы, чтобы прикрепить с включенным отладчиком .net. Поэтому указание вручную должно помочь.

Кроме того, стандартным трюком при решении проблем синхронизации отладки является установка System.Diagnostics.Debugger.Break() в ваш код C#, который позволит вам получить возможность подключить визуальную студию прямо в тот момент, когда вы уверены, что ваш код C# работает в (надеюсь, нормальный) .net runtime.

0

Visual Studio покажет эту ошибку, если ваша DLL не была загружена процессом, к которому вы подключились. Просто проигнорируйте ошибку и установите точки останова, как обычно. Когда собственное приложение загружает вашу DLL в память, значки точек останова должны быть красными и работать должным образом.

Смежные вопросы