Исправлено с помощью флага --capture=no
(или -s
) из pytest
:
pytest -v --capture=no tests/
Подробнее см. https://github.com/timofurrer /colorful/issues/23#issuecomment-468008070.
Если вы собираете программу самостоятельно, вы можете попросить свой компилятор выдать исходный код сборки. Для большинства компиляторов UNIX используйте переключатель -S
.
Если вы используете ассемблер GNU, компиляция с помощью -g -Wa, -alh
даст смешанные исходный код и сборку на stdout ( -Wa
просит драйвер компилятора передать параметры ассемблеру, -al
включает листинг сборки, а -ah
добавляет листинг «высокоуровневого источника»):
g ++ -g -c -Wa, -alh foo.cc
Для Visual Studio используйте / FAsc
.
Если вы скомпилировали двоичный файл,
objdump -d a.out
в UNIX (также работает для cygwin), dumpbin / DISASM foo.exe
в Windows. Отладчики также могут демонстрировать дизассемблирование.
disas
в GDB, В Visual Studio ;
Как уже упоминалось, отладчик вашей платформы - хорошая отправная точка. Если вам нужен отбойный молоток для всех отладчиков и дизассемблеров, посмотрите IDA Pro.
На платформах Unix / Linux (включая Cygwin) вы можете использовать objdump --disassemble
.
В Visual Studio вы можете сгенерировать список ассемблера для проекта C ++.
Перейдите в свойства проекта, затем в C ++ / Выходные файлы и установите параметры вывода ассемблера и расположение списка ASM в файл имя.
Какой бы отладчик вы ни использовали, он должен иметь представление сборки (Visual Studio, Borland IDE, gdb и т. Д.). Если вы не используете отладчик и просто хотите увидеть, какая сборка находится в программе, вы можете использовать дизассемблер или, альтернативно, запустить программу и присоединиться к ней с помощью отладчика и выполнить дамп оттуда. См. Ссылки на дизассемблеры для получения информации об опциях.
Многие люди уже рассказывали, как генерировать ассемблерный код с помощью данного компилятора. Другое решение - скомпилировать объектный файл и выгрузить его с помощью такого инструмента, как objdump , readelf (в Unix) или DUMPBIN ( ссылка ) (в Windows). Вы также можете создать дамп исполняемого файла, но это будет сложнее прочитать вывод.
Это имеет то преимущество, что работает одинаково с любым компилятором.
В GCC / G ++ компилируйте с помощью -S
. Будет выведен файл something.s
с кодом сборки.
Изменить: если вы хотите, чтобы вывод был в синтаксисе Intel (который является IMO, гораздо более читаемым, и большинство руководств по сборке используют его) , скомпилировать с -masm = intel
.
Большинство компиляторов имеют возможность вывести листинг сборки. Например, с VisualStudio вы можете использовать что-то вроде:
cl.exe /FAfile.asm file.c
Однако для лучшей читаемости большинство отладчиков будут предлагать представление, которое чередует разборку с исходным исходным кодом, поэтому вы можете сравнивать свой код с выводом компилятора построчно.
Дизассемблер PE Explorer для 32-битных файлов PE. IDA для других.
Для gcc / g ++
gcc -save-temps -fverbose-asm prog.c
Это сгенерирует программы с некоторыми комментариями к переменным, используемым в каждой строке asm:
movl $42, -24(%ebp) #, readme
movl -16(%ebp), %eax # pid, pid
movl %eax, 4(%esp) # pid,
movl $.LC0, (%esp) #,
call printf #