0

Я изучаю кодовую базу Clang с VS2015, а файл .sln генерируется CMake. Я настроил решение на Debug/x64, и я могу видеть сгенерированные файлы .pdb, сопровождающие библиотеки, но я не могу сломать код lib, связанный с исполняемым клиентом.Как отлаживать статические связанные библиотеки Clang в VS2015

Например, я установил некоторые точки останова в модуле clangParse, где поток управления должен пройти во время разбора, но после того, как печатается AST, отладчик не остановился на точках разрыва в модуле clangParse, но только на точки останова, установленные в самом модуле clang.

Для некоторых других созданных вручную решений с исполняемыми и static-libs я могу отлаживать эти библиотеки. Не уверен, почему это не работает для CMake-созданного решения Clang/LLVM.

Любые особые настройки, которые мне нужно сделать здесь?

+0

Не могли бы вы поделиться подробными инструкциями по воспроизведению этой проблемы? Этот проект успешно компилируется, если вы просто запускаете его, используя «начать без отладки (Ctrl + F5)»? Если точка останова не была удалена, а проект был скомпилирован нормально, вы получаете какие-либо полезные сообщения в окне вывода? Во время режима отладки наведите мышь на точку останова, которая не была удалена, или щелкните меню «Отладка» -> Окно -> Модули, вы получаете какие-либо сообщения? –

+0

@ Eddie-MSFT Да, я могу скомпилировать и запустить его успешно, и я могу сломать точки останова в проекте clang, но не в других статических связанных библиотеках (например, clangParse). И я уверен, что поток контроля должен пройти через точки останова, которые я установил. – Jamboree

+0

Можете ли вы включить окно настроек исключения в качестве этой ссылки: https: //msdn.microsoft.com/en-us/library/x85tt0dd.aspx. Добавьте точку останова в строку кода (A), которая вызовет библиотеку, а затем отлаживает ее с помощью «Step Into (F11)» после того, как она была удалена (A), чтобы вы могли отлаживать приложение на один шаг за один шаг, Сообщения. В разделе TOOLS-> Options-> Debugging установите флажок «Показать демонтаж, если источник недоступен». Если по-прежнему нет сообщений, можете ли вы поделиться простым образцом? –

ответ

1

Проблема заключается в том, что драйвер Clang внутренне порождает дочерний процесс сам по себе в Windows, и все интересные вещи выполняются в дочернем процессе, поэтому точки останова в libs никогда не будут попадать, потому что они находятся в другом процессе.

Чтобы решить эту проблему, установите Microsoft Child Process Debugging Power Tool и включите отладку дочернего процесса, это добавит дочерний процесс в отладчик.