Как просмотреть блок позади кода с помощью Visual C++?

Я предвосхищаю свой ответ, признавая, что у меня нет опыта работы с Докером, кроме как заядлым наблюдателем того, что выглядит действительно аккуратным решением, которое набирает обороты.

У меня есть приличный опыт работы с Vagrant, и я очень рекомендую его. Это, безусловно, более тяжелое решение с точки зрения того, что оно основано на виртуальной машине, а не на LXC. Однако я обнаружил, что приличный ноутбук (8 ГБ ОЗУ, процессор i5 / i7) без проблем запускает виртуальную машину с использованием Vagrant / VirtualBox вместе с инструментами разработки.

Одна из действительно замечательных возможностей Vagrant - это интеграция со скриптами Puppet / Chef / shell для автоматизации конфигурации. Если вы используете один из этих параметров для настройки своей производственной среды, вы можете создать среду разработки, максимально приближенную к идентичной, которую вы собираетесь получить, и это именно то, что вам нужно.

Еще одно замечательное свойство Vagrant - это то, что вы можете создавать версии Vagrantfile вместе с кодом приложения. Это означает, что все остальные в вашей команде могут поделиться этим файлом, и вы гарантированно, что все работают с одинаковой конфигурацией среды.

Интересно, что Vagrant и Docker на самом деле могут быть приветственными. Vagrant может быть расширен для поддержки различных поставщиков виртуализации, и может оказаться, что Docker станет одним из таких поставщиков, который получит поддержку в ближайшем будущем. См. https://github.com/dotcloud/docker/issues/404 для недавнего обсуждения этой темы.

110
задан Bart 19 January 2013 в 08:17
поделиться

6 ответов

Есть несколько подходов:

  1. Обычно вы можете увидеть код сборки при отладке C ++ в Visual Studio (и в Eclipse тоже). Для этого в Visual Studio поставьте точку останова на рассматриваемый код, и когда отладчик достигнет ее, щелкните правой кнопкой мыши и найдите «Перейти к сборке» (или нажмите CTRL + ALT + D)

  2. Второй подход - создание списков сборок во время компиляции. Для этого перейдите в настройки проекта -> C / C ++ -> Выходные файлы -> Расположение списка ASM и введите имя файла. Также выберите «Вывод сборки» на «Сборка с исходным кодом».

  3. Скомпилируйте программу и используйте любой сторонний отладчик. Для этого вы можете использовать OllyDbg или WinDbg. Также вы можете использовать IDA (интерактивный дизассемблер). Но это хардкорный способ сделать это.

142
ответ дан 24 November 2019 в 03:13
поделиться

Укажите переключатель / FA для cl компилятор. В зависимости от значения переключателя интегрируется либо только код сборки, либо код высокого уровня и код сборки. Имя файла получает расширение .asm. Вот поддерживаемые значения:


  • / FA Assembly code; .asm
  • / FAc Машинный и сборочный код; .cod
  • / FAs Исходный и ассемблерный код; .asm
  • / FAcs Машинный код, исходный код и код сборки; .cod
22
ответ дан 24 November 2019 в 03:13
поделиться

Самый простой способ - запустить отладчик и проверьте окно разборки .

10
ответ дан 24 November 2019 в 03:13
поделиться

В Visual C ++ параметры проекта в разделе «Файлы вывода», как мне кажется, имеют возможность вывода списка ASM с исходным кодом. Таким образом, вы увидите исходный код C / C ++ и результирующий ASM в одном файле.

5
ответ дан 24 November 2019 в 03:13
поделиться

Рефлектор .NET Red Gate - отличный инструмент, который помогал мне более чем несколько раз. Плюс этой утилиты, помимо простой демонстрации MSIL, заключается в том, что вы можете анализировать множество сторонних DLL, а Reflector позаботится о преобразовании MSIL в C # и VB.

I '

2
ответ дан 24 November 2019 в 03:13
поделиться

Дополнительное примечание: существует большая разница между выводом отладочного ассемблера и первым выпуском. Первый полезен, чтобы узнать, как компилятор создает код ассемблера из C ++. Второй полезен, чтобы узнать, как компилятор оптимизирует различные конструкции C ++. В этом случае некоторые преобразования C ++ в asm не очевидны.

28
ответ дан 24 November 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: