Внедрение точек останова 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