2009-12-15 3 views
0

У меня есть небольшая проблема. мое приложение работает без проблем в режиме отладки, но сбой в режиме деблокирования. Я не могу отследить проблему, потому что в режиме выпуска все Debuginfo кажутся бессмысленными. Однако - иногда в других проектах вывод Debug также действителен в режиме деблокирования. Какие настройки проектов мне нужно изменить, чтобы выход Debug был действительным в выпуске?VisualStudio C++, как сделать debuginfo надежным в выпуске

спасибо!

ответ

1

Даже в режиме деблокирования «Генерировать информацию отладки» должно быть установлено «Да» по умолчанию. Проблема заключается в том, что когда вы работаете в режиме Release, компилятор оптимизирует код, который затрудняет отображение отладчиком правильных значений переменных (например, он может содержать некоторые переменные в регистрах и т. Д.).

Здесь не так много, вы всегда можете отключить оптимизацию по всему миру или вокруг определенной функции, используя #pragma optimize ("", off)/#pragma optimize ("", on), но это по существу означает, что вы снова работаете в режиме отладки, и сбой, вероятно, будет прочь ...

Если вам удобно читать код сборки, вы можете перейти в режим разборки и через небольшое исследование найти правильные значения ваших переменных.

+0

Ну, все здесь правильно. Тем не менее, я не вижу, как отключение оптимизации помогает решить настоящую причину сбоя? –

+1

@Gregory Нет, вы правы, это, вероятно, не поможет вам найти крах. Это был просто пример того, как сделать отображаемые переменные надежными, но, как я написал, авария, вероятно, исчезнет. –

+0

авария, вероятно, исчезнет, ​​а не ее причина :) –

1

Вероятно, вы используете неинициализированные переменные.

В настройках проекта установите

Configuration Properties > C/C++ > General > Debug Information Format

в Program Database

Затем установите

Configuration Properties > Linker > Debugging > Generate Debug Info

в Yes

Хороший старый подход «отладки со следами» может помочь вам составить общее представление о том, где проблема. Затем снова прочитайте эту часть кода и преследуйте неинициализированные переменные.

+0

привет и спасибо! эти настройки уже установлены. Я также устанавливаю/ASSEMBLYDEBUG, но вывод отладки все еще недействителен. – Mat

+0

попытайтесь перестроить свой проект, чтобы убедиться, что pdb синхронизирован? –

+0

конечно я сделал - но все тот же. Я могу отслеживать переданные атрибуты функции, но для всех локальных переменных я получаю CXX017 Символ «variablename» не найден – Mat

 Смежные вопросы

  • Нет связанных вопросов^_^