Я пытаюсь выполнить удаленную отладку GDB с помощью gdbserver, но не могу заставить отладчик сломаться и вывести правильный исходный код. Я не уверен в том, что могу делать неправильно, поэтому я пишу все, что сделал. Я только начал использовать Linux и все эти вещи две недели назад.
Целевой код был скомпилирован с использованием компилятора CodeSoucery рука-ни-линукс-gnueabi-НКУ, и, соответственно, я использую GDB рука-NONE-Linux-gnueabi-GDB.
Сначала я захожу на цель используя SSH и запустите gdbserver, набрав в терминале:
root@zynq:/path/on/target# gdbserver localhost:3278 my_app.elf
Process my_app.elf created; pid = 2083
Listening on port 3278
Затем я запускаю GDB, набирая в терминале хоста:
b51957@B51957debian:~$ arm-none-linux-gnueabi-gdb /path/on/host/my_app.elf
GDB запускается нормально без каких-либо предупреждений и также показывает эту строку:
Эта GDB была настроена как "--host = i686-pc-linux-gnu --target = arm-none-linux-gnueabi".
Затем я установил sysroot, набрав на главном терминале:
(GDB) установить удаленный sysroot: /
Затем я подключаюсь к удаленной цели, набрав в терминале хоста:
target remote *target IP address*:3278
В терминале хоста я получаю следующий ответ:
Remote debugging using *target IP address*:3278
Reading symbols from remote:/lib/ld-linux.so.3...(no debugging symbols found)...done.
Loaded symbols for remote:/lib/ld-linux.so.3
И в целевом терминале я получаю следующий ответ:
Remote debugging from host *host IP address*
Теперь я прошу его поставить точку останова в строке 23 в main.cpp, набрав в терминале хоста:
(gdb) break main.cpp:23
Затем я позволяю этому продолжаться и затем останавливаюсь на точке останова, а затем пытаюсь перечислить исходный код. Но вместо того, чтобы попасть в мой файл main.cpp, он всегда идет в какой-то стандартный заголовок библиотеки C ++ (возможно, iostream). Вот как выглядит терминал:
(gdb) c
Continuing.
Breakpoint 1, 0x00009bdc in main ()
(gdb) l
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
и так далее…
Обратите внимание, что я использую -g
а также -o0
варианты для компиляции, а также -g
вариант для компоновщика. Я также попытался добавить папку, содержащую исходные файлы, в исходный путь GDB с помощью команды ‘directory’. Исходный путь уже содержит $cwd
а также $cdir
, Я не могу понять, почему я до сих пор не вижу свой исходный код.
Задача ещё не решена.