Я использую GDB с консоли в предварительно сконфигурированной среде, а версия, которую он предоставляет, содержит несколько ошибок. Самый обидный, один является то, что иногда, когда вступает в функцию или добавление точки останова или печать стеки вызовов, он извергает сотни последовательных линий, подобные этому:Altering/Filtering Выход GDB в режиме консоли
warning: Range for type (null) has invalid bounds 0..-103
Единственной ссылку, которую я мог бы найти для этого вопроса here и это не полезно.
Учитывая вышесказанное, я подумал, что это должно быть простым либо
проинструктировать GDB для подавления таких предупреждений - выглядит как тупик. Насколько я могу судить, GDB не позволяет пользователям подавлять такие предупреждения.
перехватить их в крюке через .gdbinit - кажется многообещающим. Я смог изменить цвет терминала, например, просунув файл .gdbinit, указанный в this answer. К сожалению, я не нашел никакого крючка в the documentation, который был бы полезен для моей цели.
фильтровать предупреждения (возможно, через какой-то прокси-сервер между stdout и GDB) - чувствует себя хакерским, но я бы не прочь сделать это, если бы это как-то сработало. Глупой попыткой было перенаправить stderr на
/dev/null
следующим образом:gdb -p xxxxxx 2> /dev/null
, но похоже, что предупреждения фактически вытолкнуты на stdout. Облом. Затем я также подумал, что, может быть, я мог бы сделать что-то глупое, например, фильтровать stdout через grep, напримерgdb -p xxxxxx | grep -v ^warning
, но это, по-видимому, имеет нежелательный побочный эффект, вызвав невидимую подсказку терминала по какой-то причине.
Есть ли у кого-нибудь идеи, что может сработать? Я много искал для чего-то, что могло бы помочь мне реализовать третью идею, но до сих пор я вышел с пустыми руками ...
Просто теория: возможно, избежать ошибок можно, слегка манипулируя символической информацией внутри двоичного кода. Я знаю, что есть некоторые инструменты для выделения выделенных символов. Похоже, ваш gdb неправильно истолковывает некоторые типы массивов. Но я понятия не имею, как это сделать (и это все равно уменьшит функциональность отладчика). –
В моей ситуации это звучит как боль в заднице, чем просто получение более новой версии GDB ... И снова, действительно, это еще один вариант на столе, но я думаю, мне нужно углубиться в внутренние части GDB, чтобы выяснить, что на самом деле это не нравится из этих символов массива. –
Если у вас есть компилятор C, легко выполнить эту простую версию [script] (http://man7.org/tlpi/code/online/dist/pty/script.c.html), удалите части, которые записываются в файл журнала, и добавьте код, чтобы отфильтровать любые строки, которые вы не хотите видеть. –