Il buon vecchio' Daniel LeCheminant has a solid answer su ciò un punto di interruzione di dati fa, quindi mi lancio in alcuni aneddoti che evidenziano impieghi utili:
Qualsiasi scenario in cui si sa che cosa cambierà, ma hanno poca o nessuna idea dove il codice che lo cambia vive (altrimenti si potrebbe semplicemente utilizzare un punto di interruzione condizionale).In particolare,
scenari "impossibili" - programma si blocca, perché variabile X
è NULL
, quando la variabile X
dovrebbe mai essere NULL
perché nessun codice da nessuna parte mai imposta variabile X
-NULL
. Inserire un punto di interruzione normale nel codice che inizializza X
e, quando viene colpito, impostare un punto di interruzione dati per controllare la modifica su NULL
. Un po 'più comune è il caso in cui la memoria viene rilasciata troppo presto, e ci sono ancora dei suggerimenti su di esso in giro: usa i punti di interruzione dei dati per scoprire chi sta liberando la memoria.
Scenari noiosi - una libreria di terze parti sta facendo cose cattive, cattive, orribili alle strutture dati. Sai che sta accadendo, perché qualcuno sta cestinando i tuoi dati e ovviamente il tuo codice è perfetto. Ma tu non sai dove, o quando. Certo, potresti passare da un megabyte di DLL disassemblate ... ma perché preoccuparti, quando puoi impostare un punto di interruzione dei dati sui tuoi dati, sederti e aspettare che venga spazzato via!
Heisenbugs - simile allo scenario impossibile, ma se ne vanno quando si guarda troppo da vicino, in modo tale che i punti di interruzione normali, anche quelli condizionali, siano inutili. Il tempo e la logica sensibile di input dell'utente sono particolarmente vulnerabili a questo genere di cose. Dal momento che i punti di interruzione dei dati non richiedono il debugger in realtà fino a l'ora è giusta, partendo dal presupposto che si può trovare una posizione di memoria che cambierà solo quando si verifica effettivamente quel bug inafferrabile è possibile utilizzare i punti di interruzione dei dati per impostare una trappola per l'Heisenbug e prenderlo in flagrante delicto.
scenari spaghetti - comuni nei vecchi, basi di codice marci in cui i dati globali si accede ovunque. Sì, potresti usare i normali breakpoint condizionali ... ma ne avresti bisogno a centinaia. I punti di interruzione dei dati lo rendono facile.
La prima frase è errata - se si imposta un punto di interruzione per visualizzare un valore previsto che è un "punto di controllo". La tua ultima frase è corretta. –