2010-05-02 16 views
6

Sto eseguendo il debug di un progetto e Visual Studio arresta il debug e chiude il programma sulla riga seguente senza eccezioni o messaggi di errore (ho abilitato le notifiche per eventuali eccezioni generate in opzioni):Visual Studio arresta il debug senza errori in modo imprevisto

var query = Session.Linq<RSS>() 
      .Where(x => x.LastRetrieved <= date || x.LastRetrieved == null) 
      .Where(x => x.Moderated); 

Dove Session.Linq fa riferimento a LINQ2NHibernate. Ad ogni modo, la domanda è: quali sono le possibili ragioni per tale comportamento? Testati sia su VS 2010 sia su 2008 - si comportano in modo identico solo a causa del debugging.

Aggiornamento . Se cambio il tipo di applicazione in "Applicazione console" si comporta normalmente. Molto strano.

+0

Hai provato a abilitare le eccezioni First Chance? (CTRL-ALT-E dalla memoria ...) –

+0

Sì, li ho abilitati tutti. –

+2

Guarda la finestra di output (Ctrl + Alt + O). Quali sono le ultime poche righe che vedi prima della fine della sessione di debug? Dice "Il programma" [1140] MyApp.vshost.exe: gestito "è terminato con il codice 0 (0x0) .'? –

risposta

3

Ho avuto un problema simile e anche se questo potrebbe non essere una soluzione per il tuo caso sopra, spero che possa aiutare qualcun altro là fuori.

ho dovuto fare riferimento a una classe che è stato scritto da qualcun altro che si presentava così:

public class ItemPrice 
    { 
     public bool sucessIndicator 
     { 
      get { return sucessIndicator; } 
      set { sucessIndicator = value; } 
     } 

     public string productCode 
     { 
      get { return productCode; } 
      set { productCode = value; } 
     } 

     public string description 
     { 
      get { return description; } 
      set { description = value; } 
     } 

     public double price 
     { 
      get { return price; } 
      set { price = value; } 
     } 
    } 

A prima vista sembra ok bene ... fino a quando si nota che ogni proprietà fa riferimento è di per sé e non un membro privato.

Quindi:

public string description 
     { 
      get { return description; } 
      set { description = value; } 
     } 

fa riferimento è di per sé in modo ricorsivo e causa un'eccezione di overflow dello stack che non ha ottenuto mostrato a me in VS anche se ho avuto tutte le eccezioni abilitate. Ha appena interrotto il debug senza alcun preavviso.

La soluzione è stata, naturalmente, per cambiarlo più simile a questo:

public string description 
     { 
      get; 
      set; 
     } 

Speranza che aiuta qualcuno.

+0

ma c'è un modo per interrompere lo stackoverflow prima che si blocca VS Debugger? – drzaus

Problemi correlati