Ошибка: вы не указали -i = mi в командной строке GDB! в Docker - PullRequest
1 голос
/ 07 февраля 2020

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

Когда я выполняю Mx gdb, я ввожу "docker -compose -f ~ / docker -services / dev / docker -compose.yml exe c dev_rhel7 bash - c "gdb -i = mi" ", а затем он показывает мне следующее сообщение.

Текущий каталог - / home / drcoeurjoly / docker -services / dev /

Ошибка: вы не указали -i = mi в командной строке GDB! ВНИМАНИЕ: переменная MY_UID не установлена. По умолчанию используется пустая строка.

1-inferior-tty-set / dev / pts / 3

2-gdb-set height 0

3-gdb-set non -stop 1

4-enable-pretty-printing

5-file-list-exe c -source-files

6-file-list-exe c -source-файл

7-gdb-show приглашение

8-стек-информационный фрейм

9-нить-информация

10- список прерываний

11-нить-информация

12-брейк-лист

= группа добавленных потоков, id = "i1"

~ "GNU GDB (GDB) Red Hat Enterprise Linux 7.6.1-114.el7 \ n"

~ "Copyright (C) 2013 Free Software Foundation, In c. \ N"

~ "Лицензия GPLv3 +: GNU GPL версии 3 или более поздней http://gnu.org/licenses/gpl.html \ nЭто бесплатное программное обеспечение: вы можете изменять и распространять его. \ NНЕТ ГАРАНТИИ, в той степени, в которой это разрешено по закону. Для подробностей введите \ "Показать копирование \" \ nand \ "Показать гарантию \". \ n "

~" Этот GDB был настроен как \ "x86_64-redhat- linux -gnu \" . \ nДля получения инструкций по сообщению об ошибках см. \ n "* 1 045 *

~ "http://www.gnu.org/software/gdb/bugs/. \ N"

= изменение cmd-param, param = "сохранение истории", значение = "on"

= cmd-param-change, param = "имя файла истории", значение = "/ home / drcoeurjoly / dotfiles / gdb / .gdb_history"

= cmd-param-change, param = "print pretty", value = "on"

= cmd-param-change, param = "print object", value = "on"

= cmd-param-change, param = "print vtbl", value = "on"

= cmd-param-change, param = "demangle-style", value = "gnu-v3"

= cmd-param-change, param = "follow -fork-mode ", value =" child "

= cmd-param-change, param =" detach-on-fork ", value =" off "

(gdb)

1 ^ сделано

(ГБД)

2 ^ сделано

(ГБД)

3 ^ сделано

( GDB)

4 ^ сделано

(GDB)

5 ^ сделано, файлы = []

(GDB)

6 ^ error, msg = "Таблица символов не загружена. Используйте команду \ "file \". "

(gdb)

7 ^ done, value =" (gdb) "

(gdb)

8 ^ error, msg = "Нет регистров."

(gdb)

9 ^ done, threads = []

(gdb)

10 ^ сделано, BreakpointTable = {nr_rows = "0", nr_cols = "6", HDR = [{ширина = "7", выравнивание = "- 1", имя_столбца = "число", colhdr = "Num"}, { ширина = "14", выравнивание = "- 1", имя_столбец = "тип", colhdr = "Тип"}, {ширина = "4", выравнивание = "- 1", имя_столбец = "DISP", colhdr = "Disp "}, {ширина =" 3" , выравнивание = "- 1", имя_столбец = "включен", colhdr = "ENB"}, {ширина = "10", выравнивание = "- 1", имя_столбец = "ADDR", colhdr = "Address"}, {width = "40", alignment = "2", col_name = "what", colhdr = "What"}], body = []}

(gdb)

11 ^ сделано, потоки = []

(gdb)

12 ^ сделано, BreakpointTable = {nr_rows = "0", nr_cols = "6", hdr = [{ ширина = "7", выравнивание = "- 1", имя_столбец = "число", colhdr = "Num"}, {ширина = "14", выравнивание = "- 1", имя_столбец = "тип", colhdr = "Тип "}, {ширина =" 4" , выравнивание = "- 1", имя_столбец = "DISP", colhdr = "Disp"}, {ширина = "3", выравнивание = "- 1", имя_столбец = "включен", colhdr = "Enb"}, {Ширина = "10", выравнивание = "- 1", имя_столбец = "ADDR", colhdr = "Адрес"}, {ширина = "40", выравнивание = "2", имя_столбец = "что", colhdr = "Что "}], body = []}

(gdb)

Обратите внимание, что я успешно ввел GDB в Docker, поскольку GDB говорит:

"GNU GDB (GDB) Red Hat Enterprise Linux 7.6.1-114.el7 \ n"

В моей операционной системе (Debian): gdb --version выводит:

GNU GDB (Debian 8.2.1-2 + b3) 8.2.1

В Debian я выполняю команду Docker: docker-compose -f ~/docker-services/dev/docker-compose.yml exec dev_rhel7 bash -c "gdb -i=mi" и получаю машинно-ориентированный текстовый интерфейс.

Из предыдущего теста я понял, что это проблема emacs, а не Docker.

При вводе пути двоичного файла вместо опции -i = mi, он отлично читает символы: M-x gdb RETURN docker-compose -f ~/docker-services/dev/docker-compose.yml exec dev_rhel7 bash -c "gdb ~/babel_sandbox/build/foo", который выдает:

Текущий каталог - / home / drcoeurjoly / docker -services / dev /

Ошибка: вы не указали -i = mi в командной строке GDB!

ПРЕДУПРЕЖДЕНИЕ: переменная MY_UID не установлена. По умолчанию используется пустая строка.

1-inferior-tty-set / dev / pts / 3

2-gdb-set height 0

3-gdb-set non -stop 1

4-enable-pretty-printing

5-file-list-exe c -source-files

6-file-list-exe c -source-файл

приглашение 7-gdb-show

8-стек-информационный фрейм

9-нить-информация

10- список прерываний

11-thread-info

12-break-list

GNU GDB (GDB) Red Hat Enterprise Linux 7.6.1-114.el7

Авторские права (C) 2013 Free Software Foundation, In c.

Лицензия GPLv3 +: GNU GPL версии 3 или более поздней http://gnu.org/licenses/gpl.html

Это бесплатное программное обеспечение: вы можете изменять и распространять его.

ГАРАНТИИ НЕ ПРЕДОСТАВЛЯЮТСЯ в той степени, в которой это разрешено законом. Для получения подробной информации введите "show copying"

и "show гарантии".

Этот GDB был настроен как "x86_64-redhat- linux -gnu".

Для ошибки см. инструкции по созданию отчетов:

http://www.gnu.org/software/gdb/bugs/ ...

Чтение символов из /home/drcoeurjoly/babel_sandbox/build/foo...done.

(gdb) 1-inferior-tty-set / dev / pts / 3

Неопределенная команда: "1-inferior-tty-set". Попробуйте "help".

(gdb) 2-gdb-set height 0

Неопределенная команда: "2-gdb-set". Попробуйте "help".

(gdb) 3-gdb-set без остановки 1

Неопределенная команда: "3-gdb-set". Попробуйте "help".

(gdb) 4-enable-pretty-printing

Неопределенная команда: "4-enable-pretty-printing". Попробуйте "help".

(gdb) 5-file-list-exe c -source-files

Неопределенная команда: "5-file-list-exe c -source -файлы». Попробуйте "help".

(gdb) 6-file-list-exe c -source-file

Неопределенная команда: "6-file-list-exe c -source -файл". Попробуйте "help".

(gdb) Приглашение 7-gdb-show

Неопределенная команда: "7-gdb-show". Попробуйте "help".

(gdb) 8-stack-info-frame

Не определена команда: "8-stack-info-frame". Попробуйте "help".

(gdb) 9-thread-info

Неопределенная команда: "9-thread-info". Попробуйте "help".

(gdb) 10-break-list

Неопределенная команда: "10-break-list". Попробуйте "help".

(gdb) 11-thread-info

Неопределенная команда: "11-thread-info". Попробуйте "help".

(gdb) 12-break-list

Неопределенная команда: "12-break-list". Попробуйте "help".

(gdb)

Я также попытался поместить gdb -i=mi в скрипт и вызывать его из emacs, но безрезультатно. Вызов напрямую из bash работал, а не из emacs.

Соответствующая информация:

Я не знаю, имеют ли значение dockerfile и docker -compose yml. Если это так, я создам репо.

Версии:

Хост: uname -a

Linux des26 4.19.0-6-amd64 # 1 SMP Debian 4.19.67-2 + deb10u2 (2019-11-11) x86_64 GNU / Linux

Emacs в хосте: emacs --version

GNU Emacs 26.3

GDB в хосте: gdb --version

GNU GDB (Debian 8.2.1-2 + b3) 8.2.1

Docker в хосте: docker --version

Docker версия 18.09.1, сборка 4c52b90

Docker - составить на хосте: docker-compose --version

docker - составить версию 1.21 .0, сборка неизвестна

Docker контейнер: cat /etc/redhat-release

CentOS Linux выпуск 7.5.1804 (Core)

GDB в docker контейнере: gdb --version

GNU GDB (GDB) Red Hat Enterprise Linux 7.6.1-114.el7

Эта проблема была Роберт Мекленбург сообщил здесь и здесь уже в августе 2017 года.

...