Как вы отлаживаете дамп ядра Linux с помощью VSCode? - PullRequest
0 голосов
/ 18 апреля 2019

Я специально генерирую дамп ядра из приложения C ++, которое я пишу, используя VSCode.Я не могу понять, как отладить дамп ядра.У кого-нибудь был опыт с этим, которым он хотел бы поделиться?

***** ОБНОВЛЕНИЕ ***** Я полагаю, у меня это работает сейчас.Я создал вторую конфигурацию отладки для основных файлов.Мне нужно было добавить параметр «coreDumpPath», который указывает на созданный файл дампа.Мне также нужно было удалить параметр preLaunchTask, который всегда будет создавать новый исполняемый файл.


1 Ответ

2 голосов
/ 18 апреля 2019

Вы не используете редактор исходного кода (даже VSCode) для отладки core dump (поскольку файл core не имеет текстовый формат). Вы используете gdb (или, возможно, какой-либо другой отладчик , такой как lldb ). У GDB есть очень хорошее руководство пользователя , которое я настоятельно рекомендую прочитать. Вы также не используете VSCode для компиляции своего кода C ++, но компилятор , такой как GCC или Clang (возможно, VSCode может быть настроен для запуска g++ для вас).

Вам также не нужно специально генерировать дамп ядра. Часто бывает проще установить точку останова в gdb. Вы можете создать ядро ​​работающего процесса, используя gcore (1) . Вы можете присоединить gdb к запущенному процессу, используя параметр -p gdb (1) . Я вижу очень мало случаев, когда создание дампов ядра специально полезно. Но, конечно, abort (3) (также используется assert (3) ) генерирует дамп core.

Ваше приложение лучше скомпилировать (используя опцию -g для GCC или Clang) с DWARF отладочной информацией. Предположим, что исполняемый файл вашего приложения представляет собой исполняемый файл yourapp. Затем вы отлаживаете дамп ядра (файл core см. В core (5) ; обратите внимание, что gdb (1) упоминается в core (5)). man страница, заданная командой man core) с использованием gdb yourapp core

Некоторые редакторы исходного кода могут работать с gdb (мой редактор emacs и способен работать с gdb с M-x gdb). Вы должны погрузиться в документацию вашего редактора исходного кода, чтобы понять, как это сделать.

Но я рекомендую использовать gdb в командной строке терминала. Это очень удобный инструмент. См. этот ответ на связанный вопрос.

gdb использует очень низкий уровень ptrace (2) системный вызов для установки точек останова и т. Д. И т. П. Вам почти никогда не понадобится ptrace (кроме случаев, когда вы пишете свой собственный отладчик, который может занять годы работы), но вы используете gdb, который использует ptrace.

PS. Как запустить gdb из VSCode - это другой вопрос. Поскольку я не использую VSCode, я не могу ответить на него. И это может даже не стоить делать. Даже с 30-летним опытом работы emacs я часто запускаю gdb в терминале. Поскольку это проще, чем запускать его из emacs (или VSCode).

NB. В наши дни, в 2019 году, «редактор исходного кода» является почти синонимом « IDE ». Оба положения на практике относятся к одним и тем же продуктам, но они различаются по способу их представления. Вы можете назвать emacs IDE, я (и сообщество GNU) предпочитаю называть его редактором исходного кода, но мы оба будем использовать его для одних и тех же вещей: приятного написания, просмотра и работы над исходный код , сборка и отладка.

...