2009-07-29 3 views
14

mio C# debugger non funziona correttamente. Salta talvolta punti di rottura e linee di codice. Ho controllato il Configuration Manager. Ho persino provato ad aggiungere i miei progetti a nuovi file di soluzione. Qualcuno può aiutarmi?Perché il mio debugger C# salta i breakpoint?

+0

L'ottimizzazione è disabilitata? Debug o Release? – Guillaume

+1

Che cosa significa "a volte"? –

+0

come posso controllare l'ottimizzazione ??? alcune volte significa che ogni volta che uso il debugger salterà dopo aver attraversato alcune linee –

risposta

8

Assicurarsi che le ottimizzazioni siano disabilitate (questa è l'impostazione predefinita per la configurazione di Debug, ma sono abilitate nella configurazione di rilascio). ottimizzazioni del compilatore può rovinare con il debugger ...

+0

Come posso regolare l'ottimizzazione del compilatore –

+0

Se si utilizza Visual Studio: fare clic con il tasto destro del mouse sul progetto in solution-explorer, quindi selezionare la scheda "Build". Dovrebbe esserci una casella di controllo intitolata "Ottimizza codice". (Almeno, questo vale per VS 2005 e 2008. Non so le versioni precedenti). – Odrade

5

Sei sicuro che sia compilato correttamente? Sembra a me come se fossi il debug contro una precedente versione, che può accadere se la generazione non riesce (forse un errore di codice, forse i file sono di sola lettura).

+0

sto compilando singoli progetti nella soluzione ma ho ancora lo stesso problema –

1

Questo suona come il codice sorgente non è sincronizzato con i file PDB. La soluzione più semplice è pulire la soluzione (che elimina tutte le DLL dalla cartella bin). Ricompila, quindi prova di nuovo a passare.

Se il problema persiste, provare a chiudere la soluzione ed eliminare le cartelle "obj". E poi riprova.

e di controllare anche la compilazione in modalità debug - qualcosa che ho fatto spesso ("perché non è facendo un passo attraverso ?!") non ottenere punto di rottura

+0

l'ho provato, ma ho ancora lo stesso problema –

23

La mia lista di controllo degli errori:

  • assicurarsi che il fissaggio al processo utilizzando il tipo di codice corretto - se il processo ha sia gestito e codice gestito allora non fare affidamento su "auto" a lavorare per voi, in modo esplicito dichiarare che tipo di codice il tentativo di eseguire il debug
  • Vai al mod finestra (Debug -> Windows -> Moduli, potrebbe essere necessario abilitarlo nel menu "Personalizza ..."
  • Verificare che l'assembly che si sta tentando di eseguire il debug sia stato caricato e che i simboli siano stati caricati - se non sono stati caricati, fare clic con il tasto destro su quel modulo e selezionare "carica simboli"
  • Aprire il file di codice e posizionare il punto di interruzione - se appare con il simbolo di avviso piccolo, guardare e vedere cosa dice,
  • Potrebbe essere necessario accedere a "strumenti -> opzioni -> debug -> generale" e deselezionare "Abilita solo il mio codice (solo gestito)"
  • Si potrebbe anche voler deselezionare "Richiedi file di origine per corrispondere esattamente alla versione originale" , se pensi che le tue fonti potrebbero essere leggere tly fuori (attenzione però, come questo può portare a voi il debug con completamente le fonti sbagliate, che può essere molto confusa)

In certi casi, si potrebbe scoprire che il modulo non viene caricato nel punto in cui si allegare il debugger (ad esempio se si dispone di una sorta di plug-in archetecutre, e le assemblee del plugin vengono caricati solo quando li si utilizza in primo luogo). In questi casi tutto ciò che puoi fare è provare e assicurarti che tutto sia pronto per il momento in cui viene caricato il modulo.

+0

grazie per una risposta così dettagliata. ho provato tutto ma stilli ha lo stesso prblema. –

+3

Disabilitare "Just My Code ..." lo ha fatto per me. Grazie. –

+0

Ottima lista. Mi ha aiutato – Arnej65

1

Se si ignorano interi metodi, esaminare l'origine e verificare se l'attributo System.Diagnostics.DebuggerStepThroughAttribute è presente.

Nonostante il nome, impedisce al debugger di passare attraverso il metodo.

+0

no salta un po 'di tempo dalla metà del Mathod e alcune volte completa il Mathod. –

+0

Brillante! Pensavo di impazzire quando un metodo personalizzato aggiunto a una classe generata da XSD non voleva eseguire il debug. Il motivo era che 'xsd.exe' decorava il codice generato con questo attributo. I punti di interruzione creati prima di F5 a volte venivano colpiti, ma non i nuovi punti di interruzione, e non sempre. – ajeh

1

Se almeno a volte viene raggiunto il punto di interruzione, significa che tutte le impostazioni sono probabilmente OK.

Gli hit mancanti possono essere causati da alcuni effetti collaterali, ad esempio: valutazione delle proprietà da parte del debugger (almeno VS ignora i breakpoint durante la valutazione della proprietà per debugger) o alcuni strumenti di spionaggio (ma questi sono di solito catturati dal debugger).

Se pensi che questo possa essere il caso, spegni gli strumenti di spionaggio e disable the property evaluation by the debugger.

Questo può talvolta non essere sufficiente, ad esempio: se la proprietà restituisce una raccolta, per es. a Count() valuterà la proprietà - quindi rimuovi anche tutti i riferimenti di proprietà dalle finestre di controllo, ecc.

1

Questo ha funzionato per me in VS 2017, vai su Strumenti> Opzioni quindi sotto la finestra Opzioni vai nella sezione Debug. Abilita - "Abilita stepping origine di .NET Framework"

1

La disattivazione di "Proprietà progetto/codice di costruzione/ottimizzazione" ha funzionato per me.