Не удается отладить неуправляемую Dll из C # - PullRequest
32 голосов
/ 17 ноября 2009

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

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

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

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

Ответы [ 4 ]

58 голосов
/ 17 ноября 2009

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

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

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

  • Выберите процесс для отладки
  • Нажмите кнопку «Выбрать ...» над списком процессов
  • Нажмите «Отладка этих типов кода»
  • Проверьте как управляемые, так и собственные
4 голосов
/ 17 ноября 2009

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

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

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

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

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

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

Если вы начинаете свой проект из визуальной студии:

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

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

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

1 голос
/ 17 ноября 2009

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

0 голосов
/ 12 января 2013

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

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

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

...