Questo è molto pericoloso, quindi mi chiedo perché è permesso. Dal momento che ho spesso bisogno di passare da VB.NET e C# a volte aggiungo breakpoint-condizioni come segue:Perché la condizione del punto di interruzione del debugger consente un'istruzione di assegnazione come condizione di bool?
foo = "bah"
Voglio smettere se la variabile string
foo
è "bah
, quindi il modo corretto era di usare al posto di foo == "bah"
foo = "bah"
.
Ma "funziona". Non si ricevono avvisi o errori in fase di compilazione o di runtime. Ma in realtà questo modifica la variabile foo
, lo rende sempre "bah"
anche se aveva un valore diverso. Poiché ciò accade silenziosamente (il punto di interruzione non viene mai colpito) è incredibilmente pericoloso.
Perché è consentito? Dov'è il mio errore nel ragionamento (a parte confondere la sintassi C# e VB.NET)? In C# (a differenza di VB.NET) un assignment statement restituisce il valore assegnato, quindi non un bool
, ma un string
in questo caso. Ma una condizione di punto di interruzione deve essere un bool
se si seleziona la casella "È vero".
Ecco un piccolo "programma" del campione e screenshot dal mio (tedesco) IDE:
static void Main()
{
string foo = "foo";
// breakpoint with assignment(foo = "bah") instead of comparison(foo == "bah"):
Console.WriteLine(foo); // bah, variable is changed from the breakpoint window
}
la finestra di breakpoint-condizione:
Il codice come immagine compreso il punto di interruzione :
Bella domanda. Questo suona decisamente come un insetto. –
Sicuramente non sembra corrispondere alla [documentazione] (https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k (vs.debug.breakpt.condition); k (TargetFrameworkMoniker-.NETFramework, Version% 3Dv4.5); k (DevLang-csharp) & rd = true): "Il punto di interruzione viene saltato solo se la condizione è valida e restituisce false" –
@Damien_The_Unbeliever: sì, in fase di esecuzione il debugger normalmente si ferma al punto di interruzione se non è valido e lo segnala. Ma non nel caso di un incarico. Puoi riprodurlo? –