Не удается отладить неуправляемую Dll из C#

У меня есть DLL, написанная на C++ и вызываемая из приложения C#. DLL — это неуправляемый код.

Если я скопирую файлы DLL и его файлы .pdb с событием после сборки в отладочное выполнение приложения C# dir, я все равно не смогу попасть ни в одну точку останова, которую я поместил в код DLL. К точке останова прикреплено сообщение о том, что «для этого документа не загружено никаких символов».

Что еще мне нужно сделать, чтобы получить отладку в исходниках dll?

У меня "Tools->Options->Debugging->General->Enable только мой код" отключен. DLL компилируется с параметром «Отслеживание времени выполнения и отключение оптимизации (/ASSEMBLYDEBUG)» и параметр «Создать отладочную информацию» для «Да (/DEBUG)».


person QueueHammer    schedule 16.11.2009    source источник


Ответы (4)


Для отладки в C++ DLL вам необходимо включить отладку в смешанном режиме для запускаемого приложения в вашем решении.

  • Щелкните правой кнопкой мыши проект -> Свойства
  • Перейти на вкладку «Отладка»
  • Установите флажок «Включить отладку неуправляемого кода».

Это позволит вам выполнять отладку собственного кода для сценария в стиле F5. Если вы хотите включить его для присоединения к процессу, выполните следующие действия в диалоговом окне «Присоединить к процессу».

  • Выберите процесс для отладки
  • Нажмите на кнопку «Выбрать…» над списком процессов
  • Нажмите «Отладить эти типы кода».
  • Проверьте как управляемый, так и собственный
person JaredPar    schedule 16.11.2009
comment
Пока я собирался ответить на этот вопрос, я не был уверен, так ли это просто или нет. Если это так просто, я, вероятно, всегда неправильно использовал его, пытаясь отлаживать управляемый код C++, который взаимодействует с собственным кодом. - person Will Eddins; 17.11.2009
comment
Обратите внимание, что если ваш стартовый проект использует другой проект DLL C#, который фактически вызывает DLL C++, для стартового проекта также должен быть включен параметр Включить отладку неуправляемого кода. - person Tom Bushell; 18.02.2012
comment
Выберите решение в обозревателе решений. Выберите из ›Меню|Инструменты|параметры|Отладка|Общие и снимите флажок Требовать, чтобы исходные файлы точно соответствовали исходной версии. - person Martin; 12.01.2013
comment
Это здорово, когда у вас также есть исходный код приложения C#. Но что произойдет, если у вас есть исходный код DLL C++, но нет приложения C#, например, клиент, использующий вашу DLL, жалуется, что она не работает, но не дает вам доступа к исходному коду своей программы C#? Есть ли способ включить отладку тогда? - person sashoalm; 05.06.2013
comment
Для VS 2013 параметр теперь называется «Включить отладку собственного кода» и все еще находится на вкладке «Отладка» в свойствах проекта. - person chappjc; 26.09.2014
comment
Также не забудьте: Tool | Options | Debugging | General внизу убедитесь, что установлен флажок Использовать управляемый режим совместимости. - person Chris O; 10.11.2014
comment
Трудно найти ответ не может быть проще. Я ценю это! - person makoshichi; 23.03.2016

Вам необходимо включить неуправляемую (собственную) отладку.

Если вы присоединяетесь к процессу после его запуска:

Перейдите в меню «Инструменты», а затем подключитесь к процессу, убедитесь, что у вас включена встроенная отладка.

Вы увидите поле редактирования только для чтения:

Прикрепить к: управляемому коду, собственному коду [Выбрать]

Убедитесь, что там указан собственный код. Если не добавить.

Если вы начинаете свой проект в Visual Studio:

В свойствах вашего проекта, которые вы запускаете в режиме отладки. Перейдите в свойства проекта, а затем выберите вкладку отладки.

Убедитесь, что этот флажок установлен:

Включить отладку неуправляемого кода

person Brian R. Bondy    schedule 16.11.2009

Когда вы подключаетесь к процессу для отладки, вы должны указать, как вы хотите подключиться. У вас есть несколько вариантов, а именно управляемый и собственный. Чтобы отлаживать код C# с помощью неуправляемого C++, вы должны подключиться к процессу как Managed и как Native (оба могут быть выбраны одновременно).

person Joseph    schedule 16.11.2009

Столкнулся с той же проблемой и сделал все, что было предложено в принятом ответе, но точки останова в неуправляемой DLL не сработали!

Однако, когда я сделал следующее, я наконец смог отладить DLL!

Выберите решение в обозревателе решений
Выберите из Menu>>Tools>>options>>Debugging>>General
Снимите флажок "Требовать точного соответствия исходных файлов исходной версии"

person Martin    schedule 12.01.2013