Ouvrir le projet PacMan
Editor
Encoder dans la Quick Launch (Ctrl + Q) : « Output »
Lancer une compilation et afficher les détails dans le panneau Output.
Ouvrir le code Form1.cs, méthode LoadBlocks
Appuyer sur [ALT] et sélectionner les blocs de code ‘Characters.Block’ Changer Characters.Block par Control.
IntelliSense
MNSE + [Tab] => MulticastNotSupportedException
Ajouter la référence vers System.ConfigurationSystem.Configuration.CM + [ab] => System.Configuration.ConfigurationManager
Start Page
Afficher la page de démarrage : View / Start Page
Punaiser le projet PacMan.
Click-droit sur un ancien projet et le supprimer de la liste.
Click-droit sur l’icône PowerPoint dans la TaskBar et punaiser le projet PacMan.
Copier le fichier VisualStudioOnline-StartPage.xaml dans le dossier C:\Users\[User]\Documents\Visual Studio 2015\StartPages
Ouvrir la fenêtre Tools / Options / Startup.
Choisir la page xaml
Afficher la StartPage via View / Start Page
Pour personnaliser la page de démarrage, il faut installer « Visual Studio SDK ». Voir https://msdn.microsoft.com/en-us/library/vstudio/ff425532.aspx
Vérifier le Keyboard MappingAfficher les Options / Environment / Keyboard, et vérifier que le mapping est sur (Default).
Navigate To – Recherche intelligente sur les classes et membres en affichant le type associé.Se positionner sur PacMan.cs / public class Pacman, et afficher Edit / Navigate To (Ctrl et ,).
Resolve a unknown namespaceDans une méthode, écrire « AsyncOperation op = new AsyncOperation(); »Se positionner sur AsyncOperation et utiliser Ctrl et ;Choisir « using System.ComponentModel ».
Go to definition – Atteindre la définition de la classe / méthode.Se positionner sur « private Dots[] ... » et appuyer sur F12.La classe Dots s’affiche.
Go to definition – Afficher la définition de la classe / méthode.Se positionner sur « private Dots[] ... » et appuyer sur Alt-F12.La classe Dots s’affiche.
Find all Ref. – Trouver toutes les références.Se positionner sur la classe « Dots.cs » et appuyer sur Shift F12.Toutes les utilisations de cette classe s’affichent.
Code LensRevenir sur la classe « Dots.cs »Cliquer sur « 47 references ».
Highlighting – Mise en surbrillance.Se positionner dans la méthode PacMan.cs / private bool IsBlock().Cliquer sur la variable « Point loc = new Point() » et voir les « loc » en surbrillance.
Paste XML As ClassesOuvrir le fichier SampleData.xml, sélectionner tout le code XML.Dans Visual Studio, se placer en fin de fichier PacMan.cs et choisir Edit / Paste Special / Paste XML As Classes.
Go Back – Go ForwardRevenir sur la classe « Dots.cs »Cliquer sur « 47 references » et en choisir une de Form1Revenir en arrière (Dots.cs) via Ctrl –Revenir en avant (Form1.cs) via Ctrl Shift –
ZoomAgrandir le code via Ctrl + MouseWheel
ArchitectureSélectionner la commande Architecture / Generate Code Map for Solution.Naviger dans PacMan_Game.Characters pour afficher la carte des classes.
RegionsMontrer le fonctionnement des touches Ctrl+M, O / L / M / H
CommentsSelectionner un bloc de code et montrer le Ctrl+K, C / Upour mettre en commentaire et supprimer les commentaires.
ExtensionsAfficher la fanêtre Tools / Extensions and Updates.Rechercher Web EssentialsChaque extension est indépendante et chargée uniquement lors du premier appel.
Extract InterfaceOuvrir le fichier Pacman.csAppeler Ctrl+R, I et afficher les méthodes et propriétes proposées pour l’interface Ipacman.Sélectionner les membres Move, Speed, TotalPoints et Type et appuyer sur OK.Vérifier l’interface créée et l’implémentation dans la classe Pacman.
Extract MethodOuvrir le code de la méthode Pacman_Pacman_Movement.Sélectionner le code « if (_Dots[i].Location.X >= …) { … } »Générer une nouvelle méthode via Ctrl+R, MAnalyser le code de la nouvelle méthode.
Rename variables, méthodes.Sélectionner la méthode Pacman_Pacman_Movement et la renommer en Pacman_Movement
Encapsulate FieldCréer une nouvelle variable « private string _maVariable = "abc"; »Sélectionner la ligne et appeler Ctrl+R, E et confirmer la création de la propriété.Analyser le code généré.
Quick ActionsDepuis VS2015, toutes ces commandes sont contextuellement accessibles via Ctrl+;
SnippetAfficher la liste des Snippet, via Ctrl+K, XChoisir le snippet Visual C# / PropFull.Afficher la définition de ce snippet, via Code / Code Snippets Manager (Csharp).Montrer le dossier d’enregistrerement des Snippet.Télécharger l’extension Snippet Designer qui permet de créer des Snippets (modifier des fichiers .snippet)
Ouvrir le fichier Pacman.cs.
Ajouter un BreakPoint dans le constructeur (this.Width = ... )
Démarrer le code et cliquer sur le bouton « Start Game ».
Punaiser les propriétés this.Size, this.Text, this.Width et this.Height.Poursuivre le code avec F10.
Constater les changements : - Propriétés en rouge et nouvelles valeurs- Le temps d’exécution de this.Width = ... de 3ms.
Arrêter le code et le re-démarrer.Les variables punaisées sont ré-affichées.
Ajouter la classe suivante au projet.Créer une instance de VisualizerSample : var sample = new VisualizerSample(); Debugger.Break();
Créer un nouveau projet « Class Library » et copier le code du projet bit.ly/1IVclOjCompiler le projet et copier la DLL dans le dossier Debugger\Visualizers.
Code d’exemple...
public class VisualizerSample
{
public string Xml
{
get
{
return "<body><level1>MyData</level1></body>";
}
}
public string JSon
{
get
{
return "{\"Col1\": \"Hello\", \"Col1\": \"World\", }";
}
}
public DataTable Table
{
get
{
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Salary");
DataRow row1 = dt.NewRow();
row1["Name"] = "Voituron";
row1["Salary"] = "500";
dt.Rows.Add(row1);
return dt;
}
}
public System.Drawing.Bitmap Image
{
get
{
const string imageUrl = "http://static.spiceworks.com/attachments/post/0012/7250/minion-clipboard.jpg";
try
{
WebClient client = new WebClient();
Stream stream = client.OpenRead(imageUrl);
Bitmap bitmap = new Bitmap(stream);
stream.Flush();
stream.Close();
return bitmap;
}
catch (Exception e)
{
return null;
}
}
}
}
Ouvrir le fichier Form1.cs et ajouter le code Try Catch du slide dans le constructeur Form1.
Exécuter le code… Aucun message ne s’affiche (du au Try Catch).
Afficher la fenêtre Windows / Debug / Exception Settings.Rechercher et cocher l’exception DivideByZeroException.
Exécuter le code… Une erreur s’enclenche.
Conditional BreakPointOuvrir le fichier PacMan.csPlacer un BreakPoint dans la méthode IsBlock(), dans la boucle for, sur la ligne « if (_Blocks[i] == null) ».Right-Click sur le point rouge du BreakPoint et choisir Conditions.Mettre la condition « Hit Count = 3 ».Exécuter le code, démarrer le jeu et déplacer PacMan (W).Vérifier la variable « i ».
Afficher la Call StackDebug / Windows / Call Stack (Ctrl+A, C)
ActionsAjouter une action « Continue Execution ».Et tracer le message « $FUNCTION – i = {i} – Blocks = {_Blocks.Length} ».Executer le code, appuyer sur « Start Game » et afficher la fenêtre Output (Debug / Windows / Output).
Mettre un BreakPoint Conditionnel sur le code suivant.int numberOfElements = 1000;for (int i = 0; i < numberOfElements; i++){ bool ok = true; // Sets a BreakPoint Conditional « Is True: i == numberOfElements – 2)}Executer le code qui prend plusieurs secondes pour afficher le point d’arrêt.Si nécessaire, augmenter le nombre d’élément de 1000 à 5000 ou 10000.
Debugger.IsAttachedRemplacer la ligne « bool ok = true; » par ...if (Debugger.IsAttached && i == numberOfElements - 2) Debugger.Break();Executer le code qui s’arrête immédiatement après avoir appuyé sur le bouton « Start Game ».
Complexité dans l’affichage des objetsOuvrir le fichier Pacman.cs.Placer un point d’arrêt dans la boucle FOR de la méthode IsBlock().Exécuter le code, démarrer un jeu (Start Game) et déplacer PacMan (W).Consulter le contenu de l’objet _Blocks... Il contient 19 « Characters.Blocks ».
Créer une classe Player et PlayerPlace.Ajouter un nouveau fichier Player.cs dans le projet.Y écrire le code suivant.public class Player{ private string _userName; private PlayerPlace _place; public string UserName { get { return _userName; } set { _userName = value; } } public PlayerPlace Place { get { return _place; } set { _place = value; } }}public class PlayerPlace{ public string Name { get; set; } public string City { get; set; } public string Country { get; set; }}Dans le constructeur Pacman.cs ajouter la création de l’objet :Player player = new Player() { UserName = "dvoituron", Place = new PlayerPlace() { Name = "Voituron", City = "Mons", Country = "Belgium" } };Debugger.Break();Exécuter le code, démarrer un jeu (Start Game).Consulter le contenu de l’objet player.
Simplifier le débuggage de l’objet.Ajouter les attributs...[DebuggerDisplay("{UserName} => {Place.Name}, {Place.Country}")]public class Player{ [DebuggerBrowsable(DebuggerBrowsableState.Never)] private string _userName; [DebuggerBrowsable(DebuggerBrowsableState.Never)] private PlayerPlace _place; public string UserName { get { return _userName; } set { _userName = value; } } [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] public PlayerPlace Place { get { return _place; } set { _place = value; } }}
Activer l’IntelliTrace via Options / Tools / Intellitrace
Ajouter un Debugger.Break(); dans le constructeur de Pacman.
Dans PacMan.cs, ajouter la commande suivante, dans la méthode Pacman_Pacman_Movement.Trace.WriteLine(String.Format("Movement to {0}.", location));Démarrer le jeu, appuyer sur le bouton « Start Game » et jouer avec le clavier.
Appuyer sur Pause et analyser :- Les données capturées : Break Events, Output Events, IntelliTrace Events.- Les temps et les durées- La Memory Usage : faire un Snapshot avant et après le Debugger.Break()