LINUX.ORG.RU

Emacs в качестве GUI для GDB, или небинарная совместимость

 cgdb, , , ,


1

2

Всем здравствуйте.

На снимке – эксперименты, являющиеся продолжением вот этой темы.

Как уже не в первый раз убеждаюсь, утилита strace с ключом -k (печатать stack trace каждого вызова) – прекрасный инструмент для первичного (грубого) поиска проблемы. Собственно, именно таким способом было выяснено, что на Debian 9 и Debian 10+ поведение java начинает различаться, начиная с инструкции <open64_w+22> из libhpi.so. В результате последовательность

b main
r
b open64_w
cont

позволяет вплотную подобраться к проблеме, но уже пер-ректально «изнутри».

На снимке – сравнение консольного интерфейса GDB (слева) и Emacs (справа). Если честно, Emacs’ом для отладки пользовался в первый раз в жизни – и он мне понравился. Понравился даже больше, чем старик DDD, который умные люди используют для полноценной визуализации данных в памяти, но вот мне самому как-то не доводилось.

В чём ценность cgdb как обёртки над gdb, особенно в отсутствие исходного кода, – я так и не понял. Если у вас есть успешный успех опыт использования cgdb – поделитесь, пожалуйста. Аналогично, xxgdb, наверное, хорош – но для того, чтобы он завёлся в 2023 году, мне надо выкинуть из ~/.gdbinit буквально всё.

За каким рожном нужен убогий и деревянный как Буратино Nemiver, по недосмотру появившийся в пакетах Debian и заявляющий в качестве ключевых особенностей совместимость с GNOME 3 и умение скопировать значение переменной в буфер обмена (я не шучу: «Ability to copy the content of a variable into the GTK clipboard») – я тоже не понял. Зачем, если есть прекрасный Emacs?

В сухом остатке: насколько я понял, ebp + 0x8, ebp + 0xc и ebp + 0x10 – это адреса параметров функции. По первому адресу лежит строка, и строка эта на Debian 9 и Debian 10 разная:

  • /usr/lib/jvm/java-1.3.1_20-sun-i386/jre/lib/rt.jar (нормальное поведение, слева) и
  • /usr/lib/jvm/java-1.3.1_20-sun-i386/jre (аномальное, справа).

Стало быть, ерунда начинается ещё до системного вызова open()/openat() и происходит в одном из пяти вызовов:

  1. sysOpen(...)
  2. JVM_Open(...)
  3. ZIP_Open_Generic(...)
  4. ZIP_Open(...)
  5. ClassLoader::setup_bootstrap_search_path(void)

Будем копать дальше.

>>> Просмотр (3840x2160, 853 Kb)

★★★★★

Проверено: hobbit ()

Классно) А обзор на старые Java IDE в итоге делать будешь? Интересно было бы.

Dog ★★★
()

Огонь! Пользуюсь emacs, но отладчик (консольный gdb/lldb) запускаю снаружи или внутри emacs shell. Но я крайне редко лезу в отладку, только если ничто другое уже не помогает.

Надо попробовать! Там у тебя есть какой-то специальный конфиг? Это вообще что такое? Встроенный интерфейс к gdb или какой-то пакет специальный?

filosofia
()
Ответ на: комментарий от filosofia

M-x gdb и всё.

Есть незначительные телодвижения, связанные с тем, что java версии 1.3 — это shell-скрипт:

export DEBUG_PROG='gdb -i=mi --args'
emacs &

– но, в общем, это всё. Из самого Emacs в качестве команды gdb запускается уже java, которая вызывает $DEBUG_PROG .java_wrapper.

Bass ★★★★★
() автор топика

Глазам не больно от шрифтов?

alex1101
()

Огонь! Я согласен, emacs — самый лучший гуй к gdb.

hateyoufeel ★★★★★
()

Если честно, когда я узнал, что в Emacs можно использовать gdb, то я ожидал опыта, который близок к тому, как это выглядит в том же VSCode, поэтому я немного загрустил когда запустил gud. Но тут виноваты только мои привычки.

snake266 ★★
()
Ответ на: комментарий от kott

Скажем так, я уже привык, глаза не болят, и dockapp’ов на экран влезает реально много =)

Масштабируемые не смотрел, спасибо за ссылку.

Bass ★★★★★
() автор топика

layout regs

Ух ты а я думал что у gdb чисто потоково-терминальный интерфейс. Надо будет попробовать этот вариант как-нить.

firkax ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.