Отладка Visual Studio (C++) в режиме отладки и режиме выпуска


Я новичок в разработке windows, и мои навыки программирования не так сильны (я с ee-фоном, основная специальность-полупроводник), но, по крайней мере, я понимаю основы C/C++.

Что касается проекта Windows C++, я обнаружил, что могу выполнять отладку как в отладочных, так и в выпускных сборках (добавляя точки останова и считывая значения переменных) в visual studio. Я провел небольшое исследование и обнаружил, что пока есть PDB-файл, я могу выполнять отладку. Однако, в "отладка-возможность" релиз сборки влияет на производительность?

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

Извините за мой ломаный английский.

3 3

3 ответа:

Нет, это не имеет значения. Параметр компоновщика / DEBUG просто выключен по умолчанию для сборки выпуска. PDB, который он генерирует, не так уж и полезен для отладки, оптимизатор, который включен для сборки выпуска, создает большой беспорядок ole в вашем сеансе отладки. У вас будут проблемы с установкой точек останова на некоторых операторах, см. одноступенчатые действия странно (выделение кода перемещается непредсказуемо) и отладчик не может показать вам переменную ценности.

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

Включение генерации PDB не влияет на генерацию кода, поэтому производительность кода выпуска не изменится, если вы включите PDBs.

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

Двоичный файл может быть отлажен в windows с PDB-файлом или без него. PDB-это своего рода база данных, которая предоставляет отладчику такую информацию, как имя локальных объектов, тип локальных объектов, смещение к исходному отображению и т. д.... Ничто из этого не является строго необходимым для отладки, это просто делает его намного лучше. Если бы Вы были так склонны, вы могли бы отлаживать сборку напрямую без PDB.

Следовательно, на самом деле нет понятия "отключение отладки". На самом деле все сводится к тому, строите ли вы сборка Debug / Release. Отладочная сборка обычно гораздо более отлаживаема, чем сборка выпуска, потому что компилятор позаботится о том, чтобы сохранить интересные локальные объекты и вставить no-ops, чтобы сделать шаг более приятным. Релизные сборки-это все о производительности конечного вывода и пожертвуют легкой отладкой, чтобы достичь ее