Vlákno názorů k článku Gdb pro normální lidi (2) od Streec - Jak je to s debuggovanim vicevlaknovych programku?

  • Článek je starý, nové názory již nelze přidávat.
  • 22. 10. 2003 8:57

    Pepa (neregistrovaný)

    Jde to docela dobre. Normalne si nastavite breakpoint, spustite to, vlakno, ktere tam dorazi, se breakne a muzete normalne debugovat. Ted nevim presne, jestli se to obcas prepne do jineho vlakna nebo ne.

  • 22. 10. 2003 12:45

    Maud lebowski (neregistrovaný)

    cha, ovsem funguje to jen kdyz neni potreba bezi sebou synchronizovat vlakna a pod, cili debugovani obecne nedoporucu vubec pouzivat a radeji dat prednost klasickemu vypisovani

  • 22. 10. 2003 19:31

    Korusef (neregistrovaný)

    Co se tyce vypisovani, mam ty nejlepsi zkusenosti, stejne ale pak ve finalu kontruluji vysledek v gdb, kdyz z logu zjistim kde to padlo.

    Jinak gbd umoznuje 'logovani' programu, ja osobne jsem to sice zatim jeste nikdy nepotreboval, ale kdyz si das v gdb 'help tracepoints' dozvis se vice.

    Dalsi velice uzitecnou featurkou gdb je prikaz set, ktery umoznuje menit hodnotu zvolene promenne (registru, ...).

    Casto pouzivam prikaz watch, kdyz chci, aby se program zastavil pri zmene hodnoty nejake promenne, pripadne kdyz nabyde nejake konkretni hodnoty.
    Tenhle prikaz ma jedinou nevyhodu a to je, ze kdyz ho pouzijete na lokalni promenne, tak po opusteni bloku, kde jsou definovany se toto nastaveni zapomene.
    Reseni je udelat si break na vstupu do tohoto bloku a nastavit si v nem ten watch jak ho chcete mit.

  • 22. 10. 2003 13:43

    kubele (neregistrovaný)

    pouzivam tyhle prikazy
    help thread :)
    info thread : vypise seznam threadu
    thread N : prepne do threadu N
    thread apply N command : v threadu N provede prikaz command

    nazorny priklad (proces vytvori thread ve kterem je pause() a potom si da taky pause())

    Program received signal SIGINT, Interrupt.
    0xb032a0e6 in SignalWaitinfo () from /x86/lib/libc.so.2
    (gdb) info threads
    2 process 1081385 0xb032a0e6 in SignalWaitinfo () from /x86/lib/libc.so.2
    1 process 1081385 0xb032a0e5 in SignalWaitinfo () from /x86/lib/libc.so.2
    (gdb) thread 1
    [Switching to thread 1 (process 1081385)]#0 0xb032a0e5 in SignalWaitinfo () from /x86/lib/libc.so.2
    (gdb) info threads
    2 process 1081385 0xb032a0e6 in SignalWaitinfo () from /x86/lib/libc.so.2
    * 1 process 1081385 0xb032a0e5 in SignalWaitinfo () from /x86/lib/libc.so.2
    (gdb) thread 2
    [Switching to thread 2 (process 1081385)]#0 0xb032a0e6 in SignalWaitinfo () from /x86/lib/libc.so.2
    (gdb) info threads
    * 2 process 1081385 0xb032a0e6 in SignalWaitinfo () from /x86/lib/libc.so.2
    1 process 1081385 0xb032a0e5 in SignalWaitinfo () from /x86/lib/libc.so.2
    (gdb) thread apply 1 break main

    Thread 1 (process 1081385):
    Breakpoint 1 at 0x8048512: file ../src/main.c, line 15.
    #0 0xb032a0e6 in SignalWaitinfo () from /x86/lib/libc.so.2
    (gdb) info threads
    * 2 process 1081385 0xb032a0e6 in SignalWaitinfo () from /x86/lib/libc.so.2
    1 process 1081385 0xb032a0e5 in SignalWaitinfo () from /x86/lib/libc.so.2