Je débogage d'une application (C ++) et j'ai trouvé un point dans le code où je souhaite modifier une valeur (via le débogueur). Donc, à l'heure actuelle, j'ai un ensemble de points d'arrêt, où je fais: p>
Cela frappe beaucoup ce point d'arrêt, alors j'aimerais automatiser cela. Je voudrais définir le point d'arrêt pour exécuter une macro et poursuivre l'exécution. P>
Cependant, je n'ai aucune expérience en train d'écrire VisualStudio Macros, donc je ne connais donc pas les commandes de modification d'une variable du programme d'exécution. J'ai regardé autour de moi, mais n'ai rien trouvé utile en ligne jusqu'à présent. P>
5 Réponses :
Si vous pensez à une macro de la même manière que Microsoft Excel, vous n'avez pas de chance. Cela ne fonctionne pas bien de cette façon.
en C ++, une macro fait référence à une petite fonction en ligne créée avec #define. C'est un pré-processeur, donc une macro est comme en utilisant un remplacement sur toutes ses références avec son corps. P>
Par exemple: P>
int* globalIntPointer;
void func() {
*globalIntPointer = 3;
//...
}
int main() {
int a = 5;
globalIntPointer = &a;
func();
//...
globalIntPointer = NULL; // for safety sake
return 0;
}
non. non. Il veut savoir comment le faire à l'aide d'une macro Visual Studio pouvant être exécutée lorsqu'un point d'arrêt est touché, sans modifier le code.
Une bonne réponse, mais l'OP demande de l'aide pour écrire / enregistrer une macro Visual Studio.
Comme d'autres l'ont dit, je veux une macro Visual Studio (rien à voir avec Excel ou #Define)
Vous pouvez exécuter une macro VS lorsqu'un point d'arrêt est touché (ouvrez la fenêtre Points d'arrêt, cliquez avec le bouton droit de la souris sur le point d'arrêt en question et sélectionnez «Lors de la touche ...» du menu contextuel). Je suis moins sûr de rédiger une macro qui modifie une variable du programme sous Debug cependant - je n'ai jamais fait cela, et un essai rapide avec tenter d'enregistrer une macro pour le faire ne semble pas fonctionner (tout cela Les enregistrements activent la fenêtre droite et ne changent pas la valeur). P>
Oui, j'ai essayé d'enregistrer une macro pour faire "Ctrl-Alt-Q", mais il a cessé d'enregistrer lorsque la fenêtre est apparue.
@Tim: Serait-il possible de simplement ajouter une ligne ou deux pour faire la mission dans le code?
J'essaie de trouver une manière qui ne force pas à recompiler complètement. J'ai trouvé un moyen de le faire, alors je vais partager cela.
J'ai trouvé comment faire cela avec une macro. Initialement, j'ai essayé d'utiliser Ctrl-Shift-R pour enregistrer une macro de frappe de frappe, mais elle a cessé d'enregistrer quand je l'ai fait Ctrl-Alt-Q. Mais j'ai pu éditer la macro pour le faire fonctionner. Alors voici ce que j'ai fait, au cas où quelqu'un d'autre veut faire quelque chose de similaire.
clic droit -> Nouvelle macro p>
Public Module RecordingModule
Sub setvalue()
DTE.Debugger.ExecuteStatement("variable_name=0")
End Sub
End Module
macros.mymacros.recordingmodule.setvalue code> li>
- vérifier "Continuer l'exécution" LI>
- Cliquez sur OK LI>
ul>
Ensuite, j'ai pu exécuter mon programme, ajustant automatiquement un pointeur à NULL tel qu'il est allé. C'était très utile pour les tests et n'avait pas besoin de recompilation. P> p>
N'est plus vrai dans Visual Studio 2015 :(
Vous recherchez une fois similaire aujourd'hui et constaté que vous pouvez également utiliser l'option "Imprimer un message" au lieu d'une macro. Les valeurs du code peuvent être imprimées en les plaçant à l'intérieur {}. La clé est que vs évaluera également le contenu comme une expression - donc {nom_name = 0} doit être identique à l'exemple macro. P>
Sélectionnez "Condition ..." et écrivez une affectation pour la variable en question dans la zone "Condition:". Cela résoudra naturellement à "vrai" avec ce n'est pas un test conditionnel réel. Par conséquent, le point d'arrêt n'est jamais touché et votre variable a été définie en conséquence. P>
Je l'ai essayé et j'ai reçu un cadeau: le point d'arrêt ne peut pas être défini. Cette expression a des effets secondaires et ne sera pas évalué.
Comment voulez-vous modifier la variable? par exemple. incrémenter un compteur.
J'ai un pointeur et je veux le mettre à null