The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Внедрение точек останова gdb в исхо..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Внедрение точек останова gdb в исхо..."  +/
Сообщение от auto_tips (??) on 29-Ноя-12, 00:50 
На github [[https://github.com/kmcallister/embedded-breakpoints опубликован]] способ внедрения в исходный код точек останова для gdb, не влияющий на нормальное выполнение программы в отсутствие отладчика. Способ основан на размещении адреса локальной переменной в секции (embed-breakpoints линкера).


  #define EMBED_BREAKPOINT \
    asm("0:"                              \
        ".pushsection embed-breakpoints;" \
        ".quad 0b;"                       \
        ".popsection;")

   int main() {
       printf("Hello,\n");
       EMBED_BREAKPOINT;
       printf("world!\n");
       EMBED_BREAKPOINT;
       return 0;
   }

Собираем враппер для gdb:

    sudo apt-get install binutils-dev
    git clone git://github.com/kmcallister/embedded-breakpoints.git
    cd embedded-breakpoints
    ./build.sh

Собираем тестовое приложение и запускаем под управлением враппера к gdb:

   $ gcc -g -o example example.c
   $ ./gdb-with-breakpoints ./example

   Reading symbols from example...done.
   Breakpoint 1 at 0x4004f2: file example.c, line 8.
   Breakpoint 2 at 0x4004fc: file example.c, line 10.

   (gdb) run

   Starting program: example
   Hello,

   Breakpoint 1, main () at example.c:8
   8           printf("world!\n");

   (gdb) info breakpoints

   Num     Type           Disp Enb Address            What
   1       breakpoint     keep y   0x00000000004004f2 in main at   example.c:8
        breakpoint already hit 1 time
   2       breakpoint     keep y   0x00000000004004fc in main at example.c:10

При выполнении напрямую и или в версии gdb без специального враппера точки останова никак не отражаются на работе программы.


URL: http://mainisusuallyafunction.blogspot.com/2012/01/embedding...
Обсуждается: http://www.opennet.ru/tips/info/2722.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от dkrot (??) on 29-Ноя-12, 00:50 
С ходу, конечно х. з. какое применение, но реализовано элегантно. Я даже и не знал что есть такая libbfd :-)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Внедрение точек останова gdb в исходный код"  +1 +/
Сообщение от qux (ok) on 29-Ноя-12, 13:56 
В первоисточние описано более подробно, про зачем больше в комментариях:
http://mainisusuallyafunction.blogspot.com/2012/01/embedding...
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Внедрение точек останова gdb в исходный код"  +1 +/
Сообщение от pavlinux (ok) on 29-Ноя-12, 20:52 
В общем прикольно, но пошагово отлаживать не выходит.


# /gdb-with-breakpoints ./example
Breakpoint 1 at 0x40054a
Breakpoint 2 at 0x400554
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040054a
2       breakpoint     keep y   0x0000000000400554
(gdb) run
Starting program: /tmp/embedded-breakpoints/example
Hello,

Breakpoint 1, 0x000000000040054a in ?? ()
(gdb) step
Cannot find bounds of current function
(gdb) step
Cannot find bounds of current function
(gdb)
...
(gdb) continue
Continuing.
world!

Breakpoint 2, 0x0000000000400554 in ?? ()
(gdb)


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от svn (??) on 01-Дек-12, 01:31 
Какой в этом смысл.

Стрипнутую проприетарщину без отладочной информации отлаживать?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Внедрение точек останова gdb в исходный код"  +1 +/
Сообщение от pavlinux (ok) on 01-Дек-12, 02:47 
> Стрипнутую проприетарщину без отладочной информации отлаживать?

А теперь ещё раз подумай, но со стороны программиста.

Я вот не понимаю, че ваще юзера делают на опенете,
есть же бубнтуфорум, сусефррум, фидорасекта, ...

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Внедрение точек останова gdb в исходный код"  +1 +/
Сообщение от ram_scan on 01-Дек-12, 20:11 
Смысл такой-же как в отладочных логах.

Мне например удобнее несколько бряков заэмбедить, чем на каждый отладочный пуск (которых много) заново ставить.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

11. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от прохожий on 08-Дек-12, 10:16 
gdb -x script

в файле
source ...
set args ....
b $file:line
...
r

это так сложно создать ?

на что только не идут люди лишь бы не читать документацию к gdb... один из самых приличных отладчиков

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

12. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от ram_scan on 10-Дек-12, 11:41 
Вот только таким макаром нельзя поставить бряк посреди функции. Хотя-бы на том основании что номера строк имеют свойство в процессе написания кода меняться.

А int3 я в код тыкал еще когда на ассемблере кодил. И находил это очень полезным.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

7. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от Аноним (??) on 04-Дек-12, 08:40 
Пипец, ты хоть что-то сложнее helloworld.c писал в своей жизни? ТОЛЬКО ЧЕСТНО.
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от gaga (ok) on 04-Дек-12, 22:16 
Я писал. И отладчик при этом от силы пару раз использовал, и то чтобы глянуть, что в библиотеке происходит. Тем не менее, нахожу трюк полезным.
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от Карбофос (ok) on 07-Дек-12, 01:08 
пропиретарное дебажить нужно, ну или трассировщиком. а такой подход можно только применять для встраивания в исходники, ибо дизасмы, они суровы. или тут есть герои, которые декомпайлеры применяли, а потом с небольшой вставкой обратно собирали и всё работало? ведь об этом речь чел завел, когда заговорил про "стрипнутые" файлы
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

9. "Внедрение точек останова gdb в исходный код"  +1 +/
Сообщение от Аноним (??) on 06-Дек-12, 14:46 
Точки останова для всех (запустивших вашу программу из-под wrapper'а GDB), даром. И пусть никто не уйдёт неотлаженным! =)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

14. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от x0r (??) on 25-Янв-13, 10:18 
не получается собрать. поставил binutils и binutils-devel
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)
[xor@gdrca:~/embedded-breakpoints-master]$ ./build.sh
+ gcc -Wall -std=c99 -lbfd -o gdb-with-breakpoints gdb-with-breakpoints.c
/tmp/cc6OMnYK.o: In function `main':
gdb-with-breakpoints.c:(.text+0x5a): undefined reference to `bfd_openr'
gdb-with-breakpoints.c:(.text+0x6f): undefined reference to `bfd_perror'
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от x0r (??) on 25-Янв-13, 10:19 
libbfd присутствует. что может быть не так?
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Внедрение точек останова gdb в исходный код"  +/
Сообщение от Rus (??) on 05-Фев-16, 06:25 
Переставь -lbfd в конец:

gcc -Wall -std=c99 -o gdb-with-breakpoints gdb-with-breakpoints.c -lbfd

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру