2012-06-08 3 views
5

C'è un modo per accedere alla modalità di debug quando viene soddisfatta una determinata condizione?Come accedere alla modalità di debug quando viene soddisfatta una condizione?

Per esempio diciamo che vorrei entrare in modalità di debug sulla linea su cui i == 1 diventa vero:

using System; 

namespace ConditionalDebug 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var r = new Random(); 
      var i = r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i += r.Next(2); 
      i = 1; 
      Console.WriteLine(i); 
     } 
    } 
} 

So che è possibile impostare i punti di interruzione condizionali come:

conditional breakpoint

Ma ovviamente non potrei usarlo dato che dovrei aggiungere un breakpoint condizionale per ogni riga nel codice in cui il valore della condizione potrebbe essere cambiato e che risulterebbe molto disordinato in un'applicazione reale.

Quindi, esiste un modo per impostare globalmente la condizione i == 1 in modo che il debugger si interrompa sulla riga in cui viene soddisfatta la condizione?

Grazie per il vostro aiuto!

risposta

3

La risposta breve è 'No'

La risposta lunga è 'Non proprio, ma un pò'. Ci sono cose che puoi fare per avvicinarti al comportamento che vuoi.

  • È possibile utilizzare la finestra di controllo e scorrere manualmente il codice e visualizzarlo.
  • È possibile trovare tutti i riferimenti sulla variabile e isolare tutte le istruzioni che possono modificare la variabile e posizionare i punti di interruzione.
  • Si potrebbe fare quanto sopra, ma utilizzare una funzione wrapper (o renderla una proprietà) e impostare solo il valore della variabile attraverso quella funzione (o setter di proprietà), quindi si dispone di un singolo punto in cui è possibile impostare il punto di interruzione condizionale per confrontare il vecchio/nuovo valore.
  • È possibile inserire un punto di interruzione su OGNI riga e impostare la condizione per tutti in una volta. Potresti essere in grado di automatizzarlo scrivendo un plug-in VS o una macro.
  • È al di là di me - ma sono sicuro che è possibile fare qualcosa di incredibilmente complesso e fantastico come scrivere il proprio debugger e implementare il tuo "Break when X Changes".
+0

Grazie, bella risposta: D Mi piace l'idea: 'Puoi mettere un punto di interruzione su OGNI riga e impostare la condizione per tutti in una volta. Potresti essere in grado di automatizzarlo scrivendo un VS Plug-in o Macro –

1

Nella finestra dei breakpoint di VS è possibile selezionare più punti di interruzione, quindi con il pulsante destro del mouse è possibile impostare una determinata condizione su entrambi in un unico passaggio.

Va bene?

+0

Grazie, è un'informazione utile ma sarebbe quasi impossibile per progetti reali con molte righe di codice. :) Quello di cui avrei bisogno sarebbe l'equivalente di avere un breakpoint condizionale su ogni riga dell'intera soluzione. –

1

Direi di no, se ci pensate chiedete al debugger di convalidare ogni riga di codice in cui sono in scope anche se guarderò questo per vedere se qualcuno può pensare a un lavoro in giro perché sarebbe interessante per vedere :)

+0

Sì, questo è quello che sto cercando di scoprire se è possibile: per il debugger controllare la condizione dopo * ogni * riga di codice nella soluzione. –