В смешанном проекте C # C (win32) с использованием VS2010 символы не загружены - PullRequest
5 голосов
/ 21 августа 2010

В моем проекте есть несколько новых модулей C # и один модуль C (не C ++), скомпилированные с использованием системных вызовов win32.Я использую уровень взаимодействия PInvoke для вызова кода C из C #.Функция C вызывается.

Все модули записывают в один каталог bin и все записывают файлы pdb.

При запуске, а затем остановке в точке останова непосредственно перед вызовом в C.dll, я вижу, что точки останова в модуле C отключены.Глядя на список «Отладка | Windows | Модули», я не вижу загруженного модуля C.dll даже после выполнения вызова.

Еще один фактоид: в Решении | Свойства | Свойства конфигурации | Конфигурация показываетМодули C # с использованием Platform = "Любой ЦП" и модуль C с использованием "Win32"

Почему модуль не загружается и почему не загружаются его символы?

Спасибо, Макс

Ответы [ 3 ]

12 голосов
/ 15 сентября 2010

Я собрал ответы из нескольких источников.

  • Вы используете конфигурацию отладки?
    В проверке решения: SolnExplorer | Solution | Свойства | ConfigurationProperties | Конфигурация = Отладка
    и: SolnExplorer | Решение | Свойства | ConfigurationProperties | Конфигурация | ProjectConfig [] = Debug -> Примечание. Хотя точки останова будут работать с конфигурацией выпуска, иногда линии могут быть оптимизированы или переставлены.

  • Вы генерируете отладочную информацию? В проектах C #: SolnExplorer | Project | Properties | ConfigurationProperties | Linker | Debugging | Создать информацию об отладке = YES
    В проектах C ++: SolnExplorer | Project | Properties | ConfigurationProperties | C / C ++ | Формат отладочной информации = База данных программы (/ Zi)
    -> Примечание: стоит проверить аргументы командной строки.

  • Все ли перестраивается? Если PDB не синхронизирован, отладчик может не загружать символы:
    В решении: SolnExplorer | Solution | Свойства | Свойства конфигурации | Build = TRUE (отмечено) для всех проектов.

  • Можно ли отлаживать неуправляемый код?
    В проектах C #: SolnExplorer | Project | Properties | Debug | Включить отладку неуправляемого кода = TRUE (проверено)
    В проектах C / C ++: SolnExplorer | Свойства | Свойства конфигурации | Отладка | Тип отладчика = Смешанный

  • Файлы помещаются туда, где вы думаете? Я использую один каталог bin \ debug для сбора всех DLL проекта и PDB.
    В проектах C #: SolnExplorer | Project | Properties | Build | Выходной путь = .. \ bin \ debug
    В проектах C / C ++: SolnExplorer | Project | Properties | ConfigProp | Linker | OutputFile = .. \ bin \ debug \ $ (TargetName) $ (TargetExt)

  • Мешают ли старые файлы? Проверьте метки времени для всех выходных файлов в каталоге bin. Убедитесь, что они на момент последнего восстановления.
    Некоторые люди советуют удалить все каталоги bin и obj. Это может быть полезным, просто чтобы увидеть, что старые файлы не лежат. Проверка отметок времени и даты должна выполняться точно так же.

  • Была ли загружена DLL? Если точки останова отключены, это может быть связано с тем, что DLL еще не загружена. Проверьте меню | Отладка | Windows | Модули.
    Ищите dll в имени модуля.
    В том же окне Модули убедитесь, что файлы загружаются с правильного пути.
    Если сборка используется несколькими программами, ее можно загрузить из GAC.
    -> Примечание: вы можете предварительно загрузить C / C ++ DLL, прежде чем это потребуется. Использование: IntPtr lpDLL = LoadLibrary (myLibraryName);

0 голосов
/ 03 февраля 2016

Вот мои пятьдесят центов. В моем случае оказалось, что pdb-файлы моих c ++ / cli проектов больше не обновлялись, в то время как pdb-файлы моих c # проектов были. Возможно, это сделало их недействительными и отладчик не смог их загрузить.

Я вспомнил, что переместил исходную базу моего проекта. После небольшой разборки мне пришло в голову, что проблема может быть в некотором абсолютном пути. Запуск git clean -dfx решил проблему для меня.

0 голосов
/ 25 июля 2014

У меня есть служба Windows в C # с C ++ DLL. Проблема, которую я увидел, заключалась в том, что заметил Макс:

  • DLL работала, но никогда не отображалась в окне модулей.

Я много занимался поиском, и это хороший список, который соответствует информации из многих других источников.

Чтобы сделать примечание Иха явным:

  • «Авто» у меня не сработало, но явно выставил «Родной» и Сработал «управляемый» код в диалоге «Присоединить».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...