2015-07-04 6 views
0

Как увидеть добавленный код в C++ компилятором?как увидеть код, добавленный компилятором?

Например, мы знаем, что , когда объект какого-либо класса выходит из области видимости, вызывается деструктор для этого объекта, но как вы видите конкретный код, вызывающий вызов деструктора? Этот код все еще написан на C++?

+1

С помощью gcc '-fdump-tree-all' создаст несколько файлов, показывающих промежуточные этапы с синтаксисом типа C. –

ответ

1

Не обязательно вводить «код». На C++ довольно ясно, когда это происходит, и для компилятора создание нового объекта явно означает вызов его конструктора - никакого дополнительного «кода» нигде.

Вы правы, однако, такие вещи, как призывы к конструктору или деструктору, должны быть где-то в сборке, но нет абсолютно никакой гарантии, что просмотр сборки показывает гораздо больше, чем то, что вы знали бы без. Компиляторы C++ довольно зрелы в этих аспектах и ​​встраивают много вещей в случаях, когда это имеет смысл, делая одинаковый код в разных местах разным.

Самое близкое, что вы получите, это добавление отладочных символов в вашу сборку и использование отладчика для получения графика вызовов - это позволит вам заметить, что вы вызываете то, что вы видите, когда код вызывается.

3

Его компилятор и язык ассемблера. Например, с компилятором Microsoft компиляция с /FAsc будет генерировать файл .cod для каждого объектного файла, содержащего код сборки, а также исходные строки C++ в качестве комментариев. Он также покажет вызовы конструкторам/деструкторам.

0

Вы можете добавить флаги в команду компиляции, которая позволит вам увидеть файл на разных этапах операций, выполняемых компилятором. Например, флаг -S будет выдавать файл, который должен был выполнить препроцессор и выполнить начальную компиляцию, но до запуска ассемблера. Однако этот код не будет записан на C++.