Совместим ли LLDB с gdbserver (для отладки кросс-скомпилированного кода?) - PullRequest
0 голосов
/ 30 марта 2020

Я студент CS, который только что изучил основы c mips для класса (Patterson & Hennessy + spim), и я пытаюсь найти решение отладки mips, которое позволяет выполнять произвольные инструкции во время процесс отладки.

Попытка с GDB (так что вы знаете, почему бы не предлагать это)

Рекомендуемая mips цепочка инструментов кросс-компиляции qemu и gdb, см. mips.com docs и связанные Q / A .

gdb Команда compile code не поддерживает mips-linux-gnu-gcc, поскольку Я могу сказать, см. gdb docs («Перемещение объектного файла») и связанные Q / A . Я получаю ошибки для malloc, mmap и недопустимые ошибки памяти (что-то не так с ad-ho c, связывающим действия gdb) при попытке использовать compile code с mips-linux-gnu-gcc, даже после фильтрации жестко закодированных аргументов компиляции, которые mips-linux-gnu-gcc не распознает.

Актуальный вопрос

lldb имеет похожую команду под названием expression, см. lldb docs , и я заинтересован в использовании lldb в сочетании с qemu. Команда expression также опирается на clang в отличие от gcc, но кросс-компиляция в clang относительно проста (clang -target mips-linux-gnu "просто работает"). Единственная проблема заключается в том, что qemu-mips -g запускает gdbserver, и я не могу найти опцию для запуска lldb-server.

Я прочитал lldb docs при удаленной отладке, и есть возможность выбрать remote-gdb-server в качестве platform. Я не могу найти много документации о remote-gdb-server, но название, по-видимому, подразумевает, что lldb может быть совместимо с gdbserver.

Вот моя попытка сделать эту работу:

qemu-mips -g 1234 test

lldb test
(lldb) platform select remote-gdb-server
  Platform: remote-gdb-server
  Connected: no
(lldb) platform connect connect://localhost:1234
  Platform: remote-gdb-server
  Hostname: (null)
  Connected: yes
(lldb) b main
  Breakpoint 1: where = test`main + 16 at test.c:4, address = 0x00400530
(lldb) c
  error: invalid process

Есть ли способ либо

  1. использовать lldb с gdbserver, либо
  2. запуск lldb-server с qemu-mips в противоположность на gdbserver

, чтобы я мог выполнять инструкции при отладке mips кода?

Примечание: я понимаю, что вместо этого я мог бы использовать qemu эмуляцию системы, чтобы иметь возможность просто запустите lldb-server на пульте. Я пытался виртуализировать debian mips, используя это руководство , но сетевой установщик не обнаружит мою сетевую карту. Судя по многочисленным SO Q / A и онлайн-форумам, решить эту проблему сложно. Поэтому сейчас я пытаюсь избежать эмуляции всей системы.

...