Новости из Блогов Внедрение точек останова gdb в исходный код

Discussion in 'Мировые новости. Обсуждения.' started by Solitude, 1 Dec 2012.

  1. Solitude

    Solitude Member

    Joined:
    29 Aug 2011
    Messages:
    445
    Likes Received:
    23
    Reputations:
    1
    Внедрение точек останова gdb в исходный код

    На github опубликован способ внедрения в исходный код точек останова для
    gdb, не влияющий на нормальное выполнение программы в отсутствие отладчика.
    Способ основан на размещении адреса локальной переменной в секции
    (embed-breakpoints линкера).


    Code:
    #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:

    Code:
       sudo apt-get install binutils-dev
        git clone git://github.com/kmcallister/embedded-breakpoints.git
        cd embedded-breakpoints
        ./build.sh
    Собираем тестовое приложение и запускаем под управлением враппера к gdb:

    Code:
     $ 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 без специального враппера точки
    останова никак не отражаются на работе программы.

    28.11.2012
    http://www.opennet.ru/tips/2722_gdb_debug_breakpoint.shtml