Как посмотреть дизассемблирование в Code::Blocks?

Я прочитал эту статью о некоторых низкоуровневых основах C/C++, и автор в основном показывает нам ассемблерный код, сгенерированный компилятором, строка за строкой. Он использует VS 2010, а я нет, я использую Code::Blocks. Как там посмотреть разборку? Когда я захожу в отладчик и нажимаю "разборка", он показывает мне пустое окно...

Это код C++ (.cpp) (весь код), который я скомпилировал:

int main()
{
    int x = 1;
    int y = 2;
    int z = 0;

    z = x + y;

    return 0;
}

person corazza    schedule 08.03.2012    source источник
comment
Если вас интересует только сборка, а не блоки кода, вы можете использовать gcc -S, и он сгенерирует файл сборки в строках *.s, *.asm   -  person Pavan Manjunath    schedule 08.03.2012
comment
Круто, я загружу Linux и сделаю это. Но я хотел бы знать, как это сделать.   -  person corazza    schedule 08.03.2012


Ответы (2)


Тип дизассемблирования, который автор показывает в статье, называется inter-leaved disassembly (перемежающийся C и дизассемблирование), который поддерживают некоторые IDE, такие как Visual Studio. Блоки кода не поддерживает. Но в Code Blocks есть отдельное окно дизассемблирования, подобное этому

Окно разборки

Выберите исходную строку. Щелкните правой кнопкой мыши. Произнесите Run to Cursor. Теперь Debug->Debugging Windows->Disassembly. Вместо запуска до курсора вы также можете установить точки останова, а затем сделать это. Но у меня как-то не ладилось, поэтому предлагаю метод Run to Cursor.

Надеюсь, поможет.

person Pavan Manjunath    schedule 08.03.2012
comment
ХОРОШО. Давайте синхронизировать с самого начала. Я читал блоки кода отсюда: sourceforge.net/projects/codeblocks/files/Binaries/10.05/ File->New->Project->Console Application->C++->Enter Project Title->GNU GCC Compiler->Finish Сейчас, Build->Build. Теперь поместите курсор @ строки 7 в main.cpp. Щелкните правой кнопкой мыши и произнесите Run to Cursor. Теперь всплывающее окно спрашивает, хотите ли вы сохранить перспективу. Скажи "нет! Теперь сделайте, как объяснено в ответе - person Pavan Manjunath; 08.03.2012
comment
@Bane Повезло с моим последним комментарием? - person Pavan Manjunath; 09.03.2012
comment
Извините за ожидание, но я был занят другим. Я сделал то, что вы сказали, теперь я вижу команду Run to cursor. Когда я выполняю его, что-то начинает происходить, на мгновение появляется окно консоли, но нет окна, которое спрашивает меня что-то о перспективе. После этого я открыл разборку и вот что увидел: img651.imageshack. us/img651/1395/tse.png. Я не качал ту же версию, что и вы, но я думаю, что такие вещи не должны отличаться. Я скачиваю новую версию сейчас, чтобы убедиться. - person corazza; 20.03.2012
comment
Проверка целостности установщика не удалась, появляется ошибка такого рода. Я думаю, что у меня самая новая версия Code::Blocks, и я сомневаюсь, что они изменят такую ​​функцию... - person corazza; 20.03.2012
comment
Срабатывают ли точки останова? При достижении точки останова окно дизассемблирования должно быть автоматически заполнено. - person Pavan Manjunath; 20.03.2012
comment
Кажется, что это не так. Я поставил точку останова (эту маленькую красную точку) в строке 7, я скомпилировал ее, затем запустил, все время открывая окно дизассемблирования, но ничего не происходит. Он просто компилируется и запускается, больше ничего не указывает... - person corazza; 21.03.2012
comment
Я думаю, что вы запускаете его, а не отлаживаете. После установки точки останова (Просто скажите «переключить точку останова на любой строке, появится новый BP») Теперь выберите Debug->Start (сочетание клавиш F8) НЕ Build->Run. Теперь БП обязательно попадут и вы увидите дизассемблированные заселённые - person Pavan Manjunath; 21.03.2012
comment
Ага! Теперь это работает. Я сейчас в своей школе, и я помню, что дома я не мог start отладчик. Наверное из-за каких-то настроек. Спасибо! - person corazza; 21.03.2012

Это новый ответ на старый пост. Другой ответ полностью соответствует теме, но содержит одно устаревшее утверждение: Блоки кода не поддерживает_,... inter- левая дизассемблирование ( C и дизассемблирование чередуются ).

Это уже не так. В новых версиях Code::Blocks эта функция обновлена.

Использование Code::Blocks версии 17.12 с gcc (tdm-1) версии 5.1.0 и кодом OP

И следуя инструкции:

  • В редакторе Code::Blocks щелкните правой кнопкой мыши интересующую строку в исходном файле и в появившемся контекстном меню выберите Run to cursor. Для этой иллюстрации закрывающая скобка } для основной функции была нажата правой кнопкой мыши.

  • Затем в меню строки заголовка выберите Debug->Debugging Windows->Disassembly. В результате появляется всплывающее окно, показывающее сборку, чередующуюся с исходным кодом:

  • Это приводит к следующему изображению, ясно показывающему, что исходный код C и ассемблерный код чередуются:

введите здесь описание изображения

person ryyker    schedule 22.07.2020
comment
Зомби, зомби :) - person Michael Dorgan; 23.07.2020
comment
@MichaelDorgan - LOL, что? что это обозначает? - person ryyker; 23.07.2020
comment
youtube.com/watch?v=6Ejga4kJUts — восстановление старой темы напомнило мне эта песня. - person Michael Dorgan; 23.07.2020
comment
@MichaelDorgan - Смешно! - person ryyker; 23.07.2020