Как установить GDB на CentOS 6

GDB - это отладчик для C, C ++, Objective-C, Pascal, Fortran, Go, D, OpenCL C, Ada и Modula-2.

CentOS основан на RHEL (Red Hat Enterprise Linux). Одна из основных целей RHEL - стать стабильной серверной операционной системой, а это означает, что новые версии программных пакетов не всегда доступны.

На момент написания этой статьи CentOS 6 предлагает GDB v7.2. Однако команда GDB недавно выпустила код для v7.91.

Официально предлагается запустить другой дистрибутив Linux, чтобы использовать более новую версию GDB. Это не всегда идеально. К счастью, в CentOS 6 можно установить более новые версии GDB. Поскольку GDB является отладчиком, а не компонентом ядра системы, использовать новую версию довольно безопасно.

В этой статье объясняется, как установить поддерживаемые и неподдерживаемые версии GDB в CentOS 6.

Я также объясню, как настроить GDB, чтобы предоставить вам более легкую для чтения отладочную информацию при использовании стандартной библиотеки C ++ (например, строки) и стандартной библиотеки шаблонов (например, вектора). Эта функция называется красивая печать.

Войдите в свой VPS и настройте учетную запись пользователя.

  1. Войдите в свой VPS. Это можно сделать, щелкнув «View Console» на панели управления Vultr или с помощью клиента SSH.

    (a) Войдите в систему как root.

    (б) Создайте свою учетную запись. Установите пароль.

    adduser <username>
    passwd <username>
    

    (c) Предоставить пользователю доступ sudo.

    visudo
        After the line "root   ALL=(ALL)   ALL"
        Add the line "<username>   ALL=(ALL)   ALL"
        --- If you aren't familiar with vi, go to the line "root   ALL=(ALL)   ALL".
        ---   Hit "o" to create a new line after that line and enter insert mode.
        ---   Type "<username>   ALL=(ALL)   ALL".
        ---   Hit ESC.
        ---   Type "ZZ" to save.
    

    (d) Выйдите из системы как пользователь root, затем войдите в систему под своей учетной записью. Гораздо безопаснее никогда не входить в систему как root. Использование sudo - лучшая практика.

Если вы хотите установить официально поддерживаемую (более старую) версию GDB

  1. Установите GDB.

    sudo yum install gdb
    
  2. Проверьте установленную версию и посмотрите ее местоположение.

    gdb --version
        May say: GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
    which gdb
        /usr/bin/gdb
    

Если вы хотите установить более новую версию GDB из исходного кода

  1. Установите компилятор C, такой как GCC. Компилятор C ++ не нужен для сборки GDB из исходного кода, но необходим для демонстрации привлекательной функции печати GDB. Вы можете собрать более свежую версию GCC из исходного кода, выполнив шаги, описанные в статье ��ак установить GCC на CentOS 6 . Или вы можете установить официально поддерживаемую версию GCC CentOS 6, выполнив:

    sudo yum install gcc gcc-c++
    
  2. Установите дополнительно необходимые пакеты.

    sudo yum install wget tar gzip ncurses-devel texinfo svn python-devel
    
  3. Решите, какую версию GDB вы хотите собрать из исходного кода. Посетите FTP-сайт GDB, чтобы увидеть версии, доступные для загрузки.

  4. Получите источник версии GDB, которую вы хотите. Остальная часть этой статьи написана для v7.9.1 и будет загружать исходные коды ~/sourceInstallations/gdb-7.9.1/- вам придется заменить правильный номер версии для более новых версий.

    mkdir ~/sourceInstallations
    cd ~/sourceInstallations
    wget ftp://ftp.gnu.org/gnu/gdb/gdb-7.9.1.tar.gz .
    tar -zxvf gdb-7.9.1.tar.gz
    
  5. Сборка ГБД. Если это завершится правильно, последняя строка, которую вы увидите, будет говорить «успех». Это нормально, когда некоторые сообщения с ошибками прокручиваются быстро. Это безопасно игнорировать.

    mkdir gdb-7.9.1.build
    cd gdb-7.9.1.build
    ../gdb-7.9.1/configure --with-python=yes && make && sudo make install && echo success
        --- If your VPS has multiple cores, you can speed up the build by changing the middle part
        ---  of this line from "&& make &&" to "&& make -j <number of cores> &&".
        --- You can see the number of cores your VPS has by running "nproc"
        --- The parameter "--with-python=yes" is necessary for the pretty printing feature
    
  6. Установите красивую печать C ++.

    cd ~/
    svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python gdb_printers
    Create a file ~/.gdbinit of:
        python
        import sys
        sys.path.insert(0, '/home/<yourUserName>/gdb_printers/')
        from libstdcxx.v6.printers import register_libstdcxx_printers
        end
    --- One way to create this file is to run "vi ~/.gdbinit", hitting "i" to enter insert mode,
    ---  typing the above file, hitting ESC, and hitting "ZZ" to save.
    
  7. Проверьте установленную версию и ее местоположение.

    gdb --version
        May say: GNU gdb (GDB) 7.9.1
    which gdb
        /usr/local/bin/gdb
    
  8. При желании запустить GDB и увидеть красивую печать.

    mkdir ~/gdbExample
    cd ~/gdbExample
    Create a file gdbExample.cpp of:
        #include <string>
        #include <vector>
        using namespace std;
    
        int main() {
           string foo = "bar";
           vector<string> vec;
           vec.push_back("foo");
           vec.push_back("bar");
           vec.push_back("foobar");
        }
    --- One way to create this file is to run "vi gdbExample.cpp", hitting "i" to enter insert mode,
    ---  typing the above file, hitting ESC, and hitting "ZZ" to save.
    g++ -ggdb gdbExample.cpp -o gdbExample
    Start GDB traditionally, by running "gdb ./gdbExample".  Or, start GDB by using its terminal user interface (basically a text mode GUI), by running "gdb --tui ./gdbExample".
    Enter "break main" to set a breakpoint at the beginning of function main() -- and it will say:
        Breakpoint 1 at 0x<someAddress>: file gdbExample.cpp, line 6.
    Enter "run" to start the program, which will immediately hit the breakpoint you just set -- and it will say:
        Starting program: /home/<yourUserName>/gdbExample/gdbExample
    
        Breakpoint 1, main () at gdbExample.cpp:6
        6          string foo = "bar";
    Enter "next" and hit enter four times, and gdb will move up to just before executing:
        10         vec.push_back("foobar"); 
    Enter "print foo" and gdb will show:
        $1 = "bar"
    Enter "print vec" and gdb will show:
        $2 = std::vector of length 2, capacity 2 = {"foo", "bar"}
        --- Remember, line 10 hasn't executed yet to add "foobar" to the vector
    Enter "quit" and "y" to quit anyway.
    
  9. По желанию освободить место на жестком диске. Ваш ~/sourceInstallationsкаталог будет занимать около 386 МБ. Вероятно, целесообразно сохранять каталоги, поскольку в будущем могут потребоваться дополнительные параметры конфигурации, и было бы быстрее сделать многое. Кроме того, процесс сборки создает журналы, которые вы можете позже проверить и работать, если что-то пойдет не так. Но после запуска sudo make installранее установленная GDB не зависит от чего-либо в этом каталоге, и пространство может быть слишком дорогим, поэтому вы можете сделать этот шаг и вернуть 386 МБ или около того. ВАЖНО: не удаляйте ~/gdb_printers/каталог! Содержимое этого каталога загружается при каждом запуске GDB. Они НЕ были собраны в самом GDB.

    cd ~/
    rm -rf sourceInstallations
    --- Again, if you can spare the space, you may someday be happy to have left it there.
    


Leave a Comment

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

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

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

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

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

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

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше