2010-04-19 3 views
1

У меня есть до того, как VC++ генерирует файлы ASM во время компиляции, которые я никогда раньше не использовал. Но это кажется весьма ограниченным, так как они просто лишние файлы, выброшенные во время компиляции. Я думал, возможно, что код ASM/C++ может быть связан, поэтому я могу перейти с C++ непосредственно на сгенерированный код ASM? Или можно установить точки останова в коде ASM? Возможно ли это, и я не знаю этих инструментов, или является генерацией ASM для автономного анализа?Понимание генерации ASM VC++

+1

Это будет трудно сделать, потому что C++ и asm не имеют представления 1: 1. –

+0

Но компилятор точно знает, какой код он сгенерировал и должен иметь возможность сопоставлять с C++ -> ASM. Следовательно, вопрос, если файл PDB содержит данные для этого, или код ASM является только побочным продуктом. –

ответ

2

Файл языка ассемблера, созданный компилятором, в основном предназначен для автономного анализа. Если вы хотите сделать что-то вроде установки точки останова в сгенерированном коде сборки, вы можете это сделать. Когда откроется соответствующий исходный файл, щелкните правой кнопкой мыши и выберите «Перейти к разборке». Это покажет вам код языка ассемблера с инструкциями источника, чередующимися как комментарии (примерно как файл, который он генерирует отдельно). Затем вы можете установить точки останова для отдельных операторов языка ассемблера, которые были сгенерированы из любого конкретного оператора источника.

+0

Это действительно работает только в режиме отладки, хотя сборка сгенерирована не так хорошо, как в выпуске. http://stackoverflow.com/questions/563000/can-optimizations-affect-the-ability-to-debug-a-vc-app-using-its-pdb –

+1

@BlueRaja: Да и нет. Пока вы создаете отладочную информацию в режиме выпуска, вы все равно можете делать примерно то же самое. Разница в том, что глобальная оптимизация может изменить порядок кода, чтобы вы больше не получали соответствие 1: 1 между исходным кодом и тем, что оно генерирует. –

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