2013-02-12 10 views
7

Modifica: ho appena provato questo con VS 2010 e il problema non si è verificato. Il problema si verifica solo con VS 2012. Potrebbe davvero essere un bug? Questo sta accadendo anche su due miei laptop separati e persino sul laptop di un amico (che ha appena ricevuto l'ultimo codice).Debugger Salto Ultimo codice check-in in VS 2012 - Funziona con VS 2010

In primo luogo, uno screenshot del problema. Questo metodo è tutto nuovo codice.

enter image description here

Il debugger è saltare codice dal mio recente check-in. I commenti, nel codice qui sotto, spiegano cosa sta succedendo quando eseguo il debug di questo metodo. Quindi non c'è davvero bisogno di cercare di capire il codice; basta notare che le righe di codice vengono saltate. Se stai pensando che il codice non corrisponda all'assemblaggio in fase di debug, ti prego di avere pazienza con me. Vedrai dove il debugger riconosce il nuovo codice, ma non il codice esistente. E questo comportamento si verifica su due computer portatili diversi, dopo aver cancellato il codice su disco e aver ottenuto di nuovo l'ultimo. Ogni commento ti dice se il debugger colpisce una linea.

[TestMethod()] 
[DeploymentItem("PrestoCommon.dll")] 
public void ApplicationShouldBeInstalledTest_UseCase9() 
{ 
    // Debugger hits this line 
    ApplicationServer appServerAccessor = new ApplicationServer(); 

    // Debugger does not hit these next two lines 
    PrivateObject privateObject = new PrivateObject(appServerAccessor); 
    ApplicationServer appServer = ApplicationServerLogic.GetByName("server10"); 

    // Debugger hits this line. Weirdness: both objects are null, and after this line runs, 
    // appServerAccessor is no longer null. 
    appServerAccessor.Id = appServer.Id; 

    // Skips this line 
    ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0]; 

    // Debugger hits this line, but F11 doesn't take me into the method. 
    appWithValidGroup.CustomVariableGroup = CustomVariableGroupLogic.GetById("CustomVariableGroups/4"); 

    // Skips this line 
    Assert.AreEqual(true, true); 
} 

Lo smontaggio mostra solo le righe di codice effettivamente colpite.

enter image description here

Ora, check this out. Se aggiungo una nuova riga di codice, il debugger lo riconosce e le altre righe di codice cambiano, fino a quando vengono riconosciute dal debugger. Solo la seconda riga di codice, all'interno del metodo, è nuova.

[TestMethod()] 
[DeploymentItem("PrestoCommon.dll")] 
public void ApplicationShouldBeInstalledTest_UseCase9() 
{ 
    // Debugger hits this line 
    ApplicationServer appServerAccessor = new ApplicationServer(); 

    // New line. It's recognized by the debugger, and it shows up in the disassembly. 
    if (DateTime.Now > DateTime.Now.AddHours(1)) { return; } 

    // Debugger does not hit these next two lines 
    PrivateObject privateObject = new PrivateObject(appServerAccessor); 
    ApplicationServer appServer = ApplicationServerLogic.GetByName("server10"); // Gets hit now. 

    // Debugger hits this line. Weirdness: both objects are null, and after this line runs, 
    // appServerAccessor is no longer null. 
    appServerAccessor.Id = appServer.Id; // No longer gets hit. 

    // Skips this line (now it's getting hit) 
    ApplicationWithOverrideVariableGroup appWithValidGroup = appServer.ApplicationsWithOverrideGroup[0]; 

    // Debugger hits this line, but F11 doesn't take me into the method. Now this gets skipped. 
    appWithValidGroup.CustomVariableGroup = CustomVariableGroupLogic.GetById("CustomVariableGroups/4"); 

    // Skips this line. Still skipped. 
    Assert.AreEqual(true, true); 
} 

Ed ecco una fotografia parziale della smontaggio, mostrando la nuova linea di codice:

enter image description here

come può essere accadendo?

Aggiungendo alla stranezza, ad un certo punto questo ancora restituito:

if (DateTime.Now > DateTime.Now.AddDays(1)) { return; } 

Le cose che ho provato:
- Eliminare il codice sorgente dal disco rigido e forzare un Leggi ultima
- riparazione VS 2012
- fare qualche VS clean-up
- Usa VS 2010, il codice di cambiamento, il check-in, ottenere più recente con VS 2012
- Reboot
- Altro (non ricordo al l di loro)

+0

puoi forse mostrare la classe 'ForceInstallation'? – MethodMan

+3

Ricostruisci il tuo codice. Inoltre, cercare il processo del test runner in Task Manager e fermarlo. Potrebbe avere una vecchia versione del tuo codice. –

+0

Ho chiuso la soluzione, l'ho riaperta e la ho ricostruita. Stesso problema. Sembra che ci siano parecchi processi MsBuild in esecuzione. Ho intenzione di riavviare e riprovare. Pubblicherò la classe 'ForceInstallation', anche se non penso sia così. –

risposta

4

Questo sembra essere un test specifico dell'unità. In VS 2012:

  • Test> Impostazioni per il test
  • Aprire il file delle impostazioni di prova scelti
  • dati e Diagnostica> deselezionare Code Coverage (Visual Studio 2010)
  • Applicare

nota, Ho avuto il vantaggio di accedere al codice sorgente e ho scaricato Presto (http://presto.codeplex.com/).

+1

Ha funzionato! Funziona anche semplicemente deselezionando il file in Test -> Impostazioni di prova. –

Problemi correlati