2009-09-30 25 views
10

Utilizzo di Visual Studio 2008 SP1 e progetto VB.NET; Ho del codice che non posso entrare. La finestra immediata mostra il messaggio "Passa sopra il metodo senza simboli 'Some.Namespace.Here'"Metodo passo-passo senza simboli - Come entrare?

Come posso essere sicuro che il metodo abbia sempre simboli ?! Devo entrare in ogni riga di codice. Sto premendo F8 (che è "Step Into" in VS2008, dalla memoria penso che fosse F11 in VS2005).

Questa roba debugger mi ha sempre confuso: a livello Soluzione Le pagine di proprietà vedo una discesa configurazione con 4 valori: Attivo (Debug), Debug, di uscita, tutte le configurazioni. - attualmente impostato su "Attivo (Debug)" A livello di progetto, vedo un menu a discesa di configurazione con 2 valori: Debug, Release. - attualmente impostato su "Debug"

risposta

0

Se lo spazio dei nomi in questione è una dll di terze parti che non è stata fornita con i simboli (file pdb), ciò si verificherà. Per "entrare in" è necessario il file di simboli.

Se si tratta del proprio codice, è sufficiente verificare due volte che i file di simboli sono presenti. Avere impostato per eseguire il debug a livello di progetto dovrebbe farlo.

+1

Sì, è il mio codice e l'ho impostato su "Attivo (Debug)" a livello di progetto (e anche il livello di soluzione, come descritto nella mia domanda iniziale). Riesco a vedere i file .pdb, infatti li ho cancellati manualmente e ricompilato di nuovo in modo che vengano riprodotti di nuovo. Mi aspetto che sia il metodo frm.Show() che il metodo frm.Focus() passino all'evento frm_Activated, quando preme F8, ma ciò non accade. Devo inserire manualmente un break-point in questo evento. – joedotnot

22

So che questa è una vecchia domanda, ma forse stai utilizzando la funzionalità di rendimento in un metodo che restituisce un oggetto IEnumerable?

Ad esempio():

public IEnumerable<object> GetObjects(IEnumerable<object> objects) 
{ 
    foreach(var obj in objects) 
     yield return obj; 
} 

corro in questo in mio test di unità spesso, ma a causa di valutazione pigra, dichiarazioni rendimento non effettua il trattamento fino a quando è necessario. Un modo per forzare l'enumerazione consiste nell'applicare un .ToList() all'istruzione chiamante, ad esempio, sebbene non si voglia farlo in modo permanente a meno che la chiamata non sia forse un test per alcune funzionalità in cui l'enumerazione stessa non è importante.

Così facendo il seguente dovrebbe comportare l'enumerazione:

GetObjects(new List<object>()).ToList(); 

In breve, se stai chiamando un metodo che richiede l'enumerazione, ma poi non enumerare il risultato, si otterrà che l'errore in uscita. Questo potrebbe accadere anche con le istruzioni LINQ, come .Seleziona.

Modifica: non ho notato che si trattava di un progetto VB.NET, ma sono abbastanza sicuro che il principio sia ancora valido.

4

Mi sono imbattuto nello stesso esatto problema in Visual Studio 2010. Vorrei tentare di accedere all'origine di .NET Framework, Visual Studio lo scavalcherebbe, la finestra di output direbbe che non è possibile entrare perché il file dei simboli non è stato caricato, ma quando ho guardato la finestra dei moduli vedrei che il relativo file di simboli è stato effettivamente caricato.

Il problema era che il file di simboli .NET è stato caricato ma non era il file di simboli .NET con le informazioni di origine incluse. Il server dei simboli pubblici di Microsoft allo http://referencesource.microsoft.com/symbols contiene simboli con informazioni di origine incluse. Il server dei simboli pubblici di Microsoft allo http://msdl.microsoft.com/download/symbols contiene simboli senza informazioni di origine.

Una soluzione è impostare correttamente _NT_SYMBOL_PATH in modo che acquisisca i simboli .NET Framework da http://referencesource.microsoft.com/symbols se esistono e da http://msdl.microsoft.com/download/symbols in caso contrario.Qualcosa del genere funzionerebbe:

_NT_SYMBOL_PATH = SRV * d: \ SymbolsCache * http: //referencesource.microsoft.com/symbols; SRV * d: \ SymbolsCache * http: //msdl.microsoft.com/download/ simboli

Questo _NT_SYMBOL_PATH farà in modo che il debugger cerchi i simboli con le informazioni di origine e, in caso contrario, otterrà i simboli senza di essi. Quando Visual Studio ha un file di simboli con le informazioni di origine è in grado di entrare in quel codice.

Problemi correlati