Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
подключение отладчика gdb
and73y
Добавлено 02.03.2010 14:32
0
Сообщение: 1
and73y
5

Пункты: 1154
Регистрация: 25.11.2009
Если кто то подключал gdb, то поделитесь опытом...
интересует отладка приложений по сети
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.03.2010 17:36 Редактировалось 02.03.2010 17:47 Сообщение: 2
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
Пользовался для местной платы только для отладки ядра через последовательный порт, думаю с отладкой приложений еще проще хоть и не пробовал:)
1 Собрать gdbserver для arm и gdb для host, например в busybox
[*] Build gdb server for the Target
[*] Build gdb for the Host
2 Закинуть gdbserver и бинарник (например myprog.bin) на плату
3 Запустить на плате gdbserver например он будет ждать соединения от большого брата на tcp порт 1234
#gdbserver x86_ip:1234 myprog.bin
4 запустить gdb на x86, например
#arm-unknown-linux-uclibc-gdb myprog.bin_with_debug_symbols
5 соединиться с платой
(gdb) target remote arm_ip:1234
6 понеслась отладка :)

ПС Для хостового gdb можно собрать графический фронтенд insight, я его правда отдельно собирал arm-unknown-linux-uclibc-insight, он вроде прямо с темми же исходниками gdb и идет

ППС Есть русский перевод руководства gdb, например тут
http://mitya.pp.ru/gdb/gdb_toc.html
правда не знаю насколько свежий он тут
Спуститься к концу Подняться к началу
Персональная информация
and73y
Добавлено 03.03.2010 13:18 Редактировалось 03.03.2010 13:37 Сообщение: 3
and73y
5

Пункты: 1154
Регистрация: 25.11.2009
Испытуемое приложение состоит из одной строки: printf('Hello world!!');
Делал следующее:
1. Собрал gdbserver для target.
2. Собрал gdb для host.
3. Закинул на плату gdbserver.
4. Закинул на плату бинарники приложения (компилировал с ключом -g).
5. Запускаю gdbserver на плате.
6. Запускаю gdb на хосте.
получаю странное поведение.
на Target:

/home/default # ./gdbserver host:2345 main
Process main created; pid = 623
Listening on port 2345
Remote debugging from host 10.1.15.114
Hello world!!

Child terminated with signal = b

Child terminated with signal = 0xb (SIGSEGV)
GDBserver exiting
/home/default #

на Host:

[root@armmaker hello]# gdb -f main
GNU gdb 6.8
Copyright (C) 2008 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 "i386-redhat-linux-gnu"...
(gdb) target remote 10.1.15.63:2345
Remote debugging using 10.1.15.63:2345
[New Thread 623]
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0x00000000 in ?? ()
(gdb) break main
Breakpoint 1 at 0x8408: file main.cpp, line 13.
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) c
Continuing.

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
(gdb)

Что я делаю не так?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 03.03.2010 14:50 Сообщение: 4
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
Я конечно могу все это повторить у себя и скорей всего все заработает, только нужно это вам ? я имею ввиду gdb для userspace ? printf с отладочной информацией дают более чем достаточно информации, тем более есть qemu.
Спуститься к концу Подняться к началу
Персональная информация
and73y
Добавлено 03.03.2010 15:23 Редактировалось 03.03.2010 15:29 Сообщение: 5
and73y
5

Пункты: 1154
Регистрация: 25.11.2009
Пользую NetBeans и хочу нормально отладчик подключить... иначе как отлаживаться?
printf - это садо мазо)

qemu не подходит - к плате подключено специфическое оборудование (в т.ч. по i2c).

как правильно конфигурировать gdbserver?
$ ../gdb-6.8/gdb/gdbserver/configure --host=arm-none-linux-gnueabi

надо ли указывать target при конфигурации gdb или достаточно так:
$ ../configure i386-redhat-linux-gnu
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 04.03.2010 03:44 Редактировалось 04.03.2010 03:59 Сообщение: 6
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
Компилировал gdbserver так

#cd gdb/gdbserver
#export CC=arm-unknown-linux-uclibcgnueabi-gcc
#./configure --host=arm-unknown-linux-uclibcgnueabi
#make

Ранее хостовый gdb был собран так

./configure --prefix=/usr --target=arm-unknown-linux-uclibc
make

Если программа собрана не статически нужно указать gdb откуда брать библиотеки, иначе сегфолт. Я делал так - указывал sysroot своего тулчейна в запущенном gdb на хосте
(gdb) set sysroot /usr/arm-unknown-linux-uclibcgnueabi/arm-unknown-linux-uclibcgnueabi/sys-root. В общем у меня все работает.

На плате тоже должны быть библиотеки доступны программе, кроме того например у меня с uclibc gdbserver запросил libthread_db которые по умолчанию например в buildroot не копируются.

На плате:

Код

# gdbserver 192.168.0.2:2345 f1
Process 1 created; pid = 328
Listening on port 2345
Remote debugging from host 192.168.0.2


На хосте:

Код

# arm-unknown-linux-uclibc-gdb f1
GNU gdb (GDB) 6.8.50.20090427-cvs
Copyright (C) 2009 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=i686-pc-linux-gnu --target=arm-unknown-linux-uclibc".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
(gdb) set sysroot /usr/arm-unknown-linux-uclibcgnueabi/arm-unknown-linux-uclibcgnueabi/sys-root
(gdb) target remote 192.168.0.136:2345
Remote debugging using 192.168.0.136:2345
0x400009e0 in _start ()
from /usr/arm-unknown-linux-uclibcgnueabi/arm-unknown-linux-uclibcgnueabi/sys-root/lib/ld-uClibc.so.0
(gdb) break main
Breakpoint 1 at 0x84a8: file f1.c, line 6.
(gdb) c
Continuing.

Breakpoint 1, main () at f1.c:6
6 FILE *f =fopen("test1", "a+b");
(gdb) s
9 for (i = 0; i < 100; i++) {
(gdb) s
10 fwrite(buf, sizeof(buf), 1, f);
(gdb) s
9 for (i = 0; i < 100; i++) {
(gdb)



У меня почему-то лихо тормозит цикл при отладке если собрано с динамическими библиотеками, когда статически - шустренько все работает.
Спуститься к концу Подняться к началу
Персональная информация
and73y
Добавлено 04.03.2010 08:58 Сообщение: 7
and73y
5

Пункты: 1154
Регистрация: 25.11.2009

да! заработало
Проблема была в неверно сконфигурированном gdb, необходимо правильно указывать --target=...
Пасибо!
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux