I simboli di debug cambiano l'esecuzione dell'applicazione [chiusa]

-2

Devo configurare il debug remoto per un'applicazione multi-thread in esecuzione su un dispositivo integrato. C ++ è la lingua.

Sono arrivato così lontano e ho ottenuto il debug remoto funzionante per una semplice applicazione, ma quando si applicano le stesse procedure sul gigante multi-thread non funzionano (l'applicazione inizia a comportarsi in modo imprevedibile se compilata con debug). Non c'è stato alcun arresto dell'esecuzione (nessun breakpoint), solo un'esecuzione standard continua, solo con i simboli di debug.

Cosa potrebbe causare un errore nella modalità di debug in questo ambiente? (ancora una volta, nessun punto di interruzione in modalità debug, solo esecuzione continua)

    
posta TheMeaningfulEngineer 01.10.2014 - 21:47
fonte

2 risposte

1

Non abbastanza informazioni per andare avanti, ma comunque ...

Prima di tutto, il codice scritto correttamente e privo di errori non fallisce quando si crea in modalità di debug. La probabilità è che tu abbia scoperto bug che non sapevi dove ci fossero.

Generalmente, attraverso tutti i tipi di applicazioni, il motivo più comune per il fallimento di una build di debug è la differenza nel layout di memoria (che attiva un errore altrimenti silenzioso). Diversi valori di inizializzazione (il codice di debug spesso riempie lo spazio inutilizzato con strani schemi di bit) o una diversa spaziatura o posizionamento lo faranno tutti. Un motivo meno comune è il diverso livello di ottimizzazione.

In particolare, per le applicazioni multi-thread, la ragione più comune è la tempistica. Il codice di debug funziona più lentamente e espone o copre le condizioni di gara.

In conclusione: hai bug da correggere. Sii grato che la modalità di debug li ha esposti per te.

    
risposta data 02.10.2014 - 02:26
fonte
2

Dato che è in C ++, potrebbe essere un sacco di cose.

Prima di tutto, in modalità debug, nella maggior parte dei compilatori, le variabili non inizializzate saranno riempite con zeri. Nella modalità di rilascio, nella maggior parte dei compilatori, le tue variabili non inizializzate sono piene di dati casuali.

Un'altra possibilità probabile è che un overflow del buffer o altra malattia del puntatore (causata forse da un comportamento non inizializzato sopra) sta corrompendo un codice leggermente diverso a causa delle differenze di ottimizzazione tra il debug e il rilascio.

Ci sono un sacco di altri, ma senza ulteriori informazioni sarà difficile da dire.

    
risposta data 01.10.2014 - 21:53
fonte

Leggi altre domande sui tag