Отладка С++/Cli: <Неизвестная функция> и никаких локалей

Я пытаюсь отлаживать проект с помощью сборки С# и сборки С++/Cli.

Интерфейс, определенный в С#, наследуется классом С++/Cli, который, в свою очередь, вызывает собственный класс С++. Отладка смешанного режима включена как в сборке С++, так и в С#, а также в запуске .exe.

Теперь, когда я пытаюсь отлаживать часть С++, это становится сложным; если я просто устанавливаю точки останова в С++-части, они не попадают (несмотря на то, что я знаю, что они попали, потому что журналы (и т.д.) написаны и выбрасывают исключение, на самом деле они будут правильно их выбрасывать).

Когда я устанавливаю точку останова при последнем вызове на С# перед вызовом в сборку смешанного режима, я могу войти в код С++/Cli и даже в исходную часть. Однако стек вызовов отображается как

MyMixedMode.dll!<Unknown function> Line ... 

и я не могу проверить какие-либо локальные жители (представление локальных жителей просто пустое внутри внутреннего кода).

Любые идеи, что я могу делать неправильно?

Ответ 1

К сожалению, части поддержки инструментария в VS для проектов С++/CLI продолжают падать, они изо всех сил стараются сохранить его. Там возникла проблема с новым движком отладки, добавленным в VS2012, который поддерживает новый визуализатор отладки С++, он больше не поддерживает С++/CLI.

VS2012 Обновление 1 добавило новый параметр в Инструменты + Параметры, Отладка, Общие, с именем "Управляемый режим совместимости с С++". Смутно переименовано в "Использовать режим управляемой совместимости" в VS2013. Недокументировано на странице MSDN для этой страницы настроек. То, что он делает, заставляет отладчик использовать старый механизм отладки вместо нового.

У этого есть побочный эффект, эти блестящие новые визуализаторы отладки не будут работать, когда вы включите эту опцию. Имейте это в виду, если отладочная информация для вашего собственного кода выглядит неправильно.

Ответ 2

Я нашел решение: параметр отладки смешанного режима в проектах недостаточно один, кроме того, Visual Studio требует включения

[x] Use Managed Compatibility Mode

в Tool- > Options- > Debugging- > General.