Probablemente el consejo más importante que puede utilizar es DebugBreak. Ponga DebugBreak() en su código, y cuando se ejecuta es como golpear un punto de quiebre.
Lo bueno es que puedes ponerle condiciones que pueden ser difíciles de establecer en un punto de interrupción regular. Aprende a usar esto!
Por ejemplo, su programa se bloquea cuando digiere un determinado archivo de datos. Descubres que se bloquea en una determinada función, pero solo después de llamarla un millón de veces +. También ha descubierto que se está bloqueando porque una cierta variable llamada x tiene el valor 1001, pero x se supone que está entre 0 y 1000.Entonces, en lugar de esperar tomar afortunadamente el lugar donde x se vuelve grande, encuentras cada lugar que x cambia. Inmediatamente después de poner la instrucción: if (x> 1000) DebugBreak();
Sí, puede hacer esto con puntos de interrupción condicionales, pero he visto un programa que demora 1 segundo en ejecutarse a 15 minutos con tres puntos de interrupción coniditional, pero se ejecuta en 1,5 segundos con DebugBreak.
Habiendo dicho esto, aquí hay un par de sugerencias útiles. Matemáticamente demuéstrate a ti mismo que la razón por la que crees que está ocurriendo un error es que el error real suceda al menos una parte del tiempo (no es probable que haya dos errores que creen el mismo problema, pero sucede). He visto algunas de las correcciones más estúpidas puestas en práctica porque la gente "siente" que es la respuesta para el error. Asegúrese de que su lógica sea tan sólida como cualquier prueba en una clase de geometría.
La segunda sugerencia si pones una solución experimental y no hace nada. Llevarlo a cabo.
Este es un buen consejo sobre la programación defensiva, pero no es un consejo específico para el depurador de Visual Studio. Puede programar DebugAsserts en cualquier entorno. –