За кулисами (BTS) выполнение компьютерной программы.

Предпосылка - Базовый обзор компьютерного программирования. Прочтите мой предыдущий пост, чтобы быстрее понять эти концепции.



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

Большинство из нас видели, как простая программа выглядит на компьютере. Это просто отформатированный текст, написанный в удобочитаемом формате или, можно сказать, на языке высокого уровня. Первое, что приходит нам в голову, когда мы начинаем писать программу, - это компилятор переводит читаемый человеком код на язык, понятный компьютеру (например, машинный код или байтовый код ). Это абсолютно верно, но в ограниченном объеме мышления. Наша программа транслируется в несколько этапов и заканчивается передачей машинного кода, и, наконец, этап связывания, который связывает различные модули программы в один объектный файл, создайте исполняемый файл.

Программа состоит из 4 этапов, чтобы окончательно преобразовать ее в исполняемый файл, а именно.

  1. Предварительная обработка: расширяет код (например - раскрытие макросов, удаление комментариев и условная компиляция).
  2. Компиляция: переводит код на язык ассемблера, понятный ассемблеру.
  3. Сборка. Ассемблер переводит код в машинный или байт-код.
  4. Связывание: он связывает различные модули кода, то есть вызовы функций, и, наконец, доставляет исполняемый файл.

Ниже указана команда Linux, с помощью которой вы можете увидеть все вышеупомянутые промежуточные файлы.

$gcc –Wall –save-temps filename.c –o filename

Компилятор против интерпретатора

Компилятор: сканирует всю программу и переводит ее в машинный код. Он продолжает перевод программы до тех пор, пока не встретит первую ошибку, и в этом случае он останавливается. Следовательно, отладка проста. Например, Java.

Интерпретатор: переводит программу по одному оператору за раз и не создает объектный код. Выдает ошибку только после сканирования всей программы. Например, Python.

GNU, GCC и G ++

GNU, рекурсивное сокращение от «G NU's N ot U nix!», представляет собой Unix-подобную операционную систему. и бесплатное программное обеспечение под Стандартной общественной лицензией (GPL). Он предназначен для разработки и распространения программного обеспечения бесплатно для всех пользователей.

GCC (коллекция компиляторов GNU) - это система компиляции, созданная проектом GNU под Стандартной общественной лицензией, поддерживающая различные языки программирования.

Ранее он назывался компилятором G NU C C, поскольку поддерживал только язык программирования C. GCC может компилировать файлы как C, так и C ++ (например, файлы .c / .cpp). Он предоставляет различные варианты, например:

  • -o Параметр (для указания выходного имени для исполняемого файла)
  • -wall Параметр (для включения предупреждений)
  • -e Параметр (для вывода препроцессора)
  • -S Параметр (файл будет содержать выходные данные сборки)
  • -c Параметр (файл будет содержать машинный код)
gcc sourcecode.c -o executable

G ++ (компилятор GNU C ++) - это команда вызова компилятора GNU C ++, которая используется для предварительной обработки, компиляции, сборки и связывания исходного кода для создания исполняемого файла. Он предоставляет набор параметров, аналогичный определенному для GCC, для получения вывода на различных промежуточных этапах компиляции кода. Например:

g++ -o main.exe hello.cpp

GDB (отладчик GNU)

GNU Debugger (GDB) - это переносимый инструмент отладки для C и многих других языков программирования, работающий в Unix-подобных операционных системах. Этот инструмент пригодится, когда наша программа на C дает сбой (например, ошибка сегментации дампа ядра) и для того, чтобы узнать, что именно случилось внутри кода. GNU Debugger работает с двоичными / исполняемыми файлами. Он предоставляет приглашение GDB, которое открывается после ввода gdb в терминале Linux, где вы можете управлять им, используя предоставляемые им команды.

Ошибка сегментации возникает, когда мы пытаемся получить доступ к постоянной памяти или пытаемся получить доступ к адресу через указатель, который уже освобожден. Сигнал UNIX, связанный с ошибкой сегментации, - SIGSEGV (номер сигнала 11).

Некоторые команды, которые предоставляет GDB:

  • r (run) - выполнить программу от начала до самого конца.
  • b (break) - предоставляет точку останова на определенной строке для отладки кода.
  • disable - чтобы отключить точку останова.
  • enable - чтобы включить отключенную точку останова.
  • n (следующий) - перейти к следующей строке кода, а не к функциям.
  • шаг - перейти к следующей инструкции, погрузившись в функции.
  • l (список) - отображает код.
  • p (печать) - для отображения сохраненного значения.
  • q (quit) - для выхода из приглашения GDB.
  • clear - очищает все точки останова.
  • continue - продолжает нормальное выполнение кода.

Эта статья - полезное руководство для тех, кто хочет изучать программирование, углубляясь в концепции компиляции, а также для тех разработчиков, которые собираются начать свою профессию как заядлые программисты. Это некоторые концепции, которые часто сбивают с толку программистов, поскольку все они кажутся похожими по своим акронимам.

Спасибо, что дочитали пост до самого конца. Поделитесь, если вам понравилось это читать.

Использованная литература:

Https://www.programiz.com

Www.geeksforgeeks.org

Https://en.wikipedia.org