2015-08-31 2 views
0

Я использую Qt Creator 3.2.1 и gdb 7.6.2 (powerpc64-fsl-linux-gdb от QorIQ SDK 1.8) для отладки скрещенных скомпилированных приложений.Qt Creator/gdb/удаленная отладка/кросс-компиляция: solib-search-path не используется

На моей тестовой машине ppc64 (Yocto) Я бегу gdbserver: gdbserver :666 /path/to/myapp

Затем я подключить с помощью Qt Creator на моем x86_64 Dev машины (Debian) для gdbserver. Я указал Kit (sysroot is /opt/fsl-networking/QorIQ-SDK-V1.8/sysroots/ppc64e6500-fsl-linux), toolchain gdb и т. Д. Это работает до сих пор. Я могу отлаживать любое приложение.

Но если мои приложения ссылка динамически библиотеки, и я хочу, чтобы отладить эту библиотеку (/path/to/libmylib.so), GDB в Qt Creator не может ступить в изломы MyLib.

То, что я хочу сделать с Qt Creator является как это:

  1. Yocto: начать gdbserver
  2. Debian: запустить powerpc64-fsl-linux-gdb /path/to/myapp и введите
    • set solib-search-path /path/to/mylib/
    • target remote 192.168.120.211:666
    • break MyLibraryFunctionIWantToDebug
    • run
    • c

Вход:

GNU gdb (GDB) 7.6.2 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "--host=x86_64-fslsdk-linux --target=powerpc64-fsl-linux". 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>... 
Reading symbols from /path/to/myapp...done. 
(gdb) show solib-search-path 
The search path for loading non-absolute shared library symbol files is . 
(gdb) set solib-search-path /path/to/mylib/ 
(gdb) show solib-search-pat 
The search path for loading non-absolute shared library symbol files is /path/to/mylib/. 
(gdb) target remote 192.168.120.211:666 
Remote debugging using 192.168.120.211:666 
(gdb) break MyLibraryFunctionIWantToDebug 
Breakpoint 1 at 0x10001088: file /path/to/myapp/myapp.c, line 196. 
(gdb) run 
The "remote" target does not support "run". Try "help target" or "continue". 
(gdb) c 
... 

исследований до сих пор:

  • gdb has a bug in version 7.4 (Я используя 7.6.2 прямо сейчас)
  • Я могу положить команду set solib-search-path /path/to/mylib/ в .gdbinit. В Qt Creator каждый .gdbinit-файл игнорируется. Я пробовал несколько мест, например. ~/.gdbinit, /path/to/myapp/.gdbinit, аргументы командной строки опция в Qt creator: -x ~/.gdbinit, Tools> Options> Debuggers, помещающая команду в каждое дополнительное поле. Никто не работает :-(
  • Я не один с моим вопросом, см here или here

Любые идеи, как пересечь отладки с помощью GDB в Qt Creator при использовании разделяемых библиотек?

+0

пытаются 'GDB прикрепить PID' http://stackoverflow.com/questions/2308653/can-i-use-gdb-to-debug-a-running-process – qknight

ответ

0

Может быть, это изменилось с QtCreator 3.6 (то, что я использую), но если я поместил команду set solib-search-path в команду «Дополнительные Attach Commands» и только это поле, я получил его для работы.

Предоставлено, мое дело может быть не полностью применимо для вас, поскольку это не полная кросс-компиляция, но случай запуска GDB на другой версии Linux, чем моя удаленная цель.

+0

Я "решил" это с помощью а (кросс) скомпилированы GDB (сервер) 7,10: -/ «GDB 7,10 приносит новые цели, функции и улучшения, в том числе:. * Улучшена поддержка доступа к общим библиотекам непосредственно из целевой системы при отладке удаленно» http://www.gnu.org/software/gdb/download/ANNOUNCEMENT – Matt

+0

Интересно. У меня нет такого варианта, по крайней мере, пока. Тем не менее, было бы неплохо иметь его в будущем, как только наши стандартные сборки и дистрибутивы продуктов будут обновлены, чтобы иметь эту версию GDB. – Lou

+0

Ну, я сделал следующее: настройте с префиксом/opt/gdb710, а затем что-то вроде «ln -s/opt/gdb710/bin/gdb/bin/gdb710» (+ тот же для gdbserver). Это нормально для временного решения, где сосуществуют обе версии gdb (server). – Matt