Отладка программы C++ в Linux

Я написал такую ​​простую программу на C++:

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello.";
    return 0;
}

Теперь хочу его отладить. Итак, какая будет команда для этого, чтобы я контролировал каждую строку?

В этом руководстве рассказывается, как отлаживать за 6 простых шагов thegeekstuff.com/2010/03/debug-c-program-using-gdb

eluish192 11.01.2013 00:44

Необязательно, в вашей программе нет ошибок.

Headcrab 19.07.2016 06:17

Я знаю, что это шутка, но мне не нравится, как отладчики сосредоточены на удалении ошибок. Отладчики позволяют нам понимать программы способами, которые были бы невозможны при простом изучении кода.

Tomas Zubiri 16.06.2019 08:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
23
3
48 254
5

Ответы 5

Для этого можно использовать gdb:

$ gdb hello

Это запустит gdb и предложит вам, что делать дальше. Команда next выполняет одну строку исходного кода и останавливается на следующей строке.

Я нашел базовый GDB учебник, который может быть полезен.

Не забудьте скомпилировать исходный код с помощью опции -g. Как это: g++ -g helloWorld.cc Это создаст исполняемый файл a.out. Вы сможете отлаживать свой a.out exe с помощью команды gdb ./a.out. Другой инструмент, который вы можете использовать, это ддд, в основном графический интерфейс для gdb.

Удачи

Если вам нужен удобный отладчик, вы можете использовать Kdbg, который, по сути, является интерфейсом gdb для KDE. Возможно, не такой мощный, как ddd, но для начала проще.

Я всегда думал, что emacs предоставляет довольно удобный интерфейс для gdb ...

Например.

  • % g ++ hello.cc -g -o привет
  • emacs hello.cc
  • [В Emacs] Escape-x gdb
  • Emacs скажет: «Запустите gdb (вот так): gdb».
  • Добавьте свое двоичное имя («привет»). (Например, «Запустите gdb (вот так): gdb hello».)
  • Перейдите в буфер hello.cc.
  • Используйте команду emacs 'gud-break', чтобы установить точку останова в gdb из вашего буфера hello.cc. (Обычно привязан к «пространству C-x».)
  • Зайдите в свой * гуд-привет * буфер.
  • Введите "запустить" в приглашении (gdb).
  • Используйте [N] Next или [S] Step. Или [C] Продолжить. [BT] Обратная трассировка также полезна.
  • Обратите внимание, что происходит с маленьким треугольником в крайнем левом столбце буфера hello.cc.

(Этого должно быть достаточно, чтобы вы начали. Emacs - это emacs, всегда есть больше возможностей ...)

Я рекомендую компилировать с g++ -Wall -Wextra hello.cc -g -o hello, потому что предупреждения компилятора действительно полезны.

Basile Starynkevitch 22.04.2016 11:26

В курсе программирования C++, который я читал в Швеции, была часть лаборатории, посвященная отладчику GNU. Я никогда не использовал его после, но здесь есть статья, объясняющая основное использование, насколько я помню, в главе 2.

Другие вопросы по теме