Задать вопрос
  • Можно ли подключиться к запущенной программе без отладочной информации с помощью gdb и подключить к ней отладочную информацию?

    @qvlad Автор вопроса
    Можно. Запустить gdb так:
    gdb program-image-with-debug-symbols
    и выполнить из командной строки gdb
    attach pid
    где pid -- номер процесса к которому надо подключиться.

    Ну и, понятное дело, чтобы это работало правильно, program-image-with-debug-symbols должна отличаться от выполняющейся программы только наличием отладочной информации.

    gdb /tmp/telemetry 
    GNU gdb (GDB) 7.5.1
    Copyright (C) 2012 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 "arm-buildroot-linux-gnueabi".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>...
    Reading symbols from /tmp/telemetry...done.
    (gdb) attach 6986
    Attaching to program: /tmp/telemetry, process 6986
    Reading symbols from /lib/ld-linux-armhf.so.3...(no debugging symbols found)...done.
    Loaded symbols for /lib/ld-linux-armhf.so.3
    0x403eb276 in ?? ()
    (gdb) bt
    #0  0x403eb276 in ?? ()
    #1  0x4045a488 in ?? ()
    #2  0x4045a488 in ?? ()
    gdb /tmp/telemetry
    b InfoListener::saveValue
    Breakpoint 1 at 0x241e8: file InfoListener.cpp, line 949.
    (gdb) c
    Continuing.

    После запуска вижу соттветствующий лог из функции, но программа не останавливается на установленном breakpoint.
    Если сразу под gdb запустить бинарник с отладочными символами и поставить ту же точку остановки, то все работает корректно. Если подключаться к процессу запущенному с бинарником с отладочными символами то тоже все работает корректно.
    Ответ написан