Domanda

Quali sono i modi possibili per eseguire il debug dei thread di deadlock in un programma MT, diverso da gdb?

È stato utile?

Soluzione

Su alcune piattaforme gli strumenti di rilevamento dei deadlock possono aiutarti a trovare deadlock già osservati e non ancora osservati , così come altri bug.

Su Solaris, prova LockLint .
Su Linux, prova Helgrind o DRD .

Altri suggerimenti

Se stai usando POSIX, prova a indagare su PTHREAD_MUTEX_ERRORCHECK.

Ho sempre investito un po 'di tempo nella scrittura o nell'innesto in una struttura di registrazione flessibile in progetti su cui ho lavorato, e ha sempre ripagato profumatamente nel trasformare bug difficili in semplici. Per lo meno, avvolgere le primitive di blocco in funzioni o metodi che registrano prima e dopo la registrazione e visualizzano l'oggetto bloccato e il thread che sta eseguendo il blocco mi ha sempre aiutato a concentrarmi sul thread offensivo in pochi minuti - supponendo che il problema può essere riprodotto, ovviamente.

Il caricamento del programma sotto un debugger è in realtà un metodo piuttosto limitato per determinare cosa è successo una volta che un processo si blocca, dal momento che tutto ciò che può darti è un'istantanea di quanto hai incasinato, piuttosto che una spiegazione passo-passo di come rovinato, che trovo molto più utile.

O ottieni Intel Thread Checker. Ottimo lavoro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top