QNX GDB сервер для отладки приложения - PullRequest
0 голосов
/ 08 февраля 2019

В настоящее время я использую qnx gdb server для отладки приложения, но есть некоторые удивительные вещи.

В моем проекте много файлов, например

src/a.c src/b.c src/c.c
include/a.h include/b.h include/c.h

с использованием MakefileЯ создаю файл libso с именем libtest.so и именем исполняемого файла helloworld.

Я вывожу libtest.so и helloworld на целевую машину, и путь равен /home/user/myapp/ и хорошо задаю PATH, и я могу запустить helloworld на целевой машине

Внимание, в libtest.so есть забавное имя Display(), в i nclude/c.h (в строке 5) есть функция myfun(), и myfun вызовет Dislpay() функцию:

myfun(){Display();}

Когда я использую qnx gdb server, шаг выглядит следующим образом:

  1. ntoaarch64-gdb
  2. file helloworld
  3. target qnx IP:PORT
  4. upload helloworld /home/user/helloworld
  5. b c.h:5 
  6. r

Это вызывает остановку на точке останова myfun(), но когда я запускаю команду step или stepi, она не может перейти в функцию Display(), и я запускаю команду disassemble, она показывает 0x100cd5e0 <Display@plt>, Нет никакого разборки содержимого функции Display, я, кажется, опущен!

Есть какие-либоРабота или пропущенный шаг, когда я отлаживаю это приложение, кто может помочь мне, у меня скорость пять дней ... Большое спасибо

Кстати, я думаю, это вопрос о сервере GDB, а не вопрос о сервере QNX GDB.

1 Ответ

0 голосов
/ 08 февраля 2019

, но когда я запускаю команду step или stepi, она не может перейти в Display() функцию

Это несколько ожидается с ленивым динамическим разрешением символов.Обратите внимание, что если вы снова наберете myfun , вы сможете без проблем набрать step в Display.

Лучшее решение - установить break Display.

В качестве альтернативы, вы можете использовать export LD_BIND_NOW=1 перед запуском helloworld или связать двоичный файл с -Wl,-z,now, чтобы отключить ленивую привязку символов.

...