Usar mapas de código para depurar aplicaciones

Los mapas de código en Visual Studio le ayudan a evitar bases de código de gran tamaño, código con el que no esté familiarizado o código heredado. Por ejemplo, en la depuración, es posible que tenga que buscar en varios proyectos y archivos. Use mapas de código para navegar por fragmentos de código y entender las relaciones entre ellos. De este modo evitará tener que realizar un seguimiento mental de este código o dibujar un diagrama independiente. Así, cuando interrumpa su trabajo, los mapas de código le ayudarán a recordar el código en el que está trabajando.

Code map - Map relationships in code

Una flecha verde muestra la posición del cursor en el editor.

Para obtener detalles de los comandos y las acciones que puede usar al trabajar con mapas de código, vea Examinar y reorganizar mapas de código.

Obtenga más información sobre la depuración en Visual Studio con la herramienta Depurador.

Nota

Para crear y editar mapas de código, necesita Visual Studio Enterprise. En las ediciones Community y Professional de Visual Studio, puede abrir diagramas que se generaron en la edición Enterprise, pero no puede editarlos.

Entender el problema

Supongamos que hay un error en un programa de dibujo en el que está trabajando. Para reproducir el error, abra la solución en Visual Studio y presione F5 para iniciar la depuración.

Cuando dibuje una línea y elija Deshacer mi último trazo, no sucederá nada hasta que se dibuje la línea siguiente.

Code map - Repro bug

Por tanto, comienza la investigación buscando el método Undo. Lo encuentra en la clase PaintCanvas.

Code map - Find code

Empezar a asignar el código

Ahora comience la asignación del método undo y sus relaciones. Desde el editor de código, agrega el método undo y los campos a los que se hace referencia a un nuevo mapa de código. Cuando se crea un nuevo mapa, es posible que se tarde algo de tiempo en indizar el código. Esto ayuda a que se ejecuten más rápido las operaciones posteriores.

Code map - Show method and related fields

Sugerencia

El resaltado verde muestra los últimos elementos agregados al mapa. La flecha verde muestra la posición del cursor en el código. Las flechas entre los elementos representan diferentes relaciones. Para más información sobre los elementos del mapa, pase el mouse sobre ellos y examine su información sobre herramientas.

Code map - Show tooltips

Para consultar la definición de código de cada campo, haga doble clic en el campo del mapa o seleccione el campo y presione F12. La flecha verde se desplaza entre los elementos del mapa. El cursor del editor de código también se desplaza automáticamente.

Screenshot of a code map window with the history field selected and a code editor window where all instances of history are highlighted.

Screenshot of a code map window with the paintObjects field selected and a code editor window where all instances of paintObjects are highlighted.

Sugerencia

También puede mover la flecha verde en el mapa moviendo el cursor en el editor de código.

Entender las relaciones entre los elementos de código

Ahora desea saber qué otro código interactúa con los campos history y paintObjects. Puede agregar todos los métodos que hacen referencia a estos campos al mapa. Puede hacer esto desde el mapa o desde el editor de código.

Code map - Find all references

Open a code map from the code editor

Nota:

Si agrega elementos de un proyecto que se comparte entre varias aplicaciones, como Windows Phone o la Tienda Windows, dichos elementos aparecen siempre en el mapa con el proyecto de aplicación activo actualmente. Por lo tanto, si cambia el contexto a otro proyecto de aplicación, también cambia el contexto en el mapa para cualquier elemento recién agregado desde el proyecto compartido. Las operaciones que se realizan con un elemento en el mapa solo se aplican a los elementos que comparten el mismo contexto.

Cambie el diseño para reorganizar el flujo de las relaciones y facilitar la lectura del mapa. También puede mover los elementos por el mapa arrastrándolos.

Screenshot of a code map window with the Layout menu open and the Left to Rgiht command selected.

Sugerencia

De forma predeterminada, Diseño incremental está activado. El mapa se reorganiza lo menos posible cuando se agregan nuevos elementos. Para reorganizar el mapa completo cada vez que agregue nuevos elementos, desactive Diseño incremental.

Screenshot of a code map window with the relationshiop arrows between the fields pointing from left to right.

Examinemos estos métodos. En el mapa, haga doble clic en el método PaintCanvas o seleccione este método y presione F12. Verá que este método crea history y paintObjects como listas vacías.

Screenshot of a code map window with the PaintCanvas method selected and a code snippet image showing the PainCanvas method name highlighted.

Ahora repita los mismos pasos para examinar la definición del método clear. Verá que clear lleva a cabo algunas tareas con paintObjects e history. A continuación, llama al método Repaint.

Screenshot of a code map window with the Clear method selected and a code snippet image showing the code for the Clear method.

Ahora, examine la definición del método addPaintObject. También realiza algunas tareas con history y paintObjects. También llama a Repaint.

Screenshot of a code map window with the addPaintObject method selected and a code snippet image showing the code for the addPaintObject method.

Buscar el problema examinando la asignación

Parece que todos los métodos que modifican history y paintObjects llaman a Repaint. Con todo, el método undo no llama a Repaint, aunque undo modifica los mismos campos. Por tanto, cree que puede corregir este problema mediante una llamada a Repaint desde undo.

Code map - Find missing method call

Si no tuviese un mapa para encontrar la llamada que falta, posiblemente sería más difícil localizar este problema, sobre todo con código más complejo.

Compartir la información y pasos siguientes

Antes de que usted u otro usuario corrija este error, puede hacer anotaciones en el mapa acerca del problema y de cómo corregirlo.

Code map - Comment and flag items for followup

Por ejemplo, puede agregar comentarios al mapa y marcar los elementos con colores.

Code map - Commented and flagged items

Si tiene Microsoft Outlook instalado, puede enviar el mapa a otras personas por correo electrónico. También puede exportar el mapa como imagen u otro formato.

Code map - Share, export, mail

Corregir el problema y mostrar lo que hizo

Para corregir este error, agregue la llamada de Repaint a undo.

Code map - Add missing method call

Para confirmar la corrección, reinicie su sesión de depuración e intente reproducir el error. Ahora, si elige Deshacer mi último trazo funciona como se esperaba y confirma que su corrección ha sido la adecuada.

Code map - Confirm code fix

Puede actualizar el mapa para mostrar la corrección que realizó.

Code map - Update map with missing method call

El mapa muestra ahora un vínculo entre deshacer y Volver a dibujar.

Code map - Updated map with method call

Nota:

Cuando actualice el mapa, puede que vea un mensaje que indica que se ha actualizado el índice de código utilizado para crear el mapa. Esto significa que alguien ha cambiado el código, lo que hace que el mapa no coincida con código actual. Esto no detiene su actualización del mapa, pero podría tener que volver a crearlo para confirmar que coincide con el código.

Ahora ha terminado con la investigación. Encontró y corrigió correctamente el problema asignando el código. También tiene un mapa que le ayuda a navegar por el código y a recordar lo que ha aprendido, y le muestra los pasos llevados a cabo para corregir el problema.