2008-10-09 22 views
0

Je rencontre un problème étrange avec Visual Studio 2005: J'ai un point d'arrêt de données qui est configuré pour exécuter une macro et continuer (c'est-à-dire, je sélectionne une macro et cochez Continuer exécution). Exécuter silencieusement la macro lorsque la valeur dans le point d'arrêt de données (tracepoint, vraiment) change, je reçois d'abord une boîte de message m'informant que le point d'arrêt a été frappé, et la macro ne fonctionne qu'après avoir frappé OK.Comment faire pour que le débogueur Visual Studio arrête de s'arrêter aux points d'arrêt de données définis pour exécuter une macro et continuer?

Le code que je débogue est sensible au timing, ce qui rend impossible le débogage. Y at-il un moyen de désactiver la boîte de message qui apparaît?

En réponse à des commentaires: La macro elle-même peut être vide, ou il peut être l'un des exemples de macro fournis par Microsoft - cela ne fait pas de différence.

+0

Pouvez-vous inclure la macro? –

+0

Cela se produit même si la macro est vide ou si je sélectionne l'un des exemples de macros. Donc, la macro elle-même est hors de propos. –

Répondre

0

Je n'ai pas de vsnet 2005 sur ma machine.
Donc, je spécule ici.

Quelle est la ligne d'exécution?

Est-ce qu'il essaie d'évaluer une propriété?
Un point d'arrêt conditionnel est-il défini lors de la lecture de la propriété? (c'est-à-dire, pause lorsque la propriété est lue?)

Essayez de supprimer d'autres points d'arrêt liés à la ligne d'exécution en cours et d'ajouter à nouveau un point de trace.

+0

Il s'agit d'un point d'arrêt de données - il se brise lorsqu'un emplacement de mémoire est écrit à partir de n'importe où dans le code, donc il n'est pas vraiment associé à une ligne de code. C'est du code C++ natif - je ne suis pas sûr de ce que vous entendez par "propriété" mais je pense que ce n'est pas pertinent. Supprimer le point d'arrêt ne fait pas de différence. –

+0

Y a-t-il un ensemble de points d'arrêt (dans la fenêtre des instructions natives qui apparaît lorsque vous déboguez le code)? Il y a une option pour voir quelles sont les instructions natives en cours d'exécution et j'imagine que l'on peut également y définir un point d'arrêt. Est-ce le cas? – shahkalpesh

+0

Non. Et il s'agit d'un point d'arrêt de données, il n'est donc pas associé à une instruction spécifique - le débogueur n'a pas besoin de mettre une instruction int 3. Les points d'arrêt de données sont généralement implémentés à l'aide des registres de débogage du processeur (DR0-DR3.) –

1

Il le fait aussi pour moi. Le comportement semble quelque peu différent en fonction de la façon dont vous définissez l'option "Continuer l'exécution", donc je soupçonne que ce comportement (aussi douloureux soit-il) puisse être intentionnel. Ou ce peut être un bug, mais dans les deux cas, vous pouvez être bloqué.

Une alternative pourrait être d'utiliser windbg ou l'un des autres Windows debugging tools, qui prennent également en charge les points d'arrêt de données. Ils prennent un peu de temps pour s'y habituer et ne sont pas aussi faciles à utiliser que le débogueur Visual Studio, mais ils sont assez puissants. La commande "ba" crée un point d'arrêt de données, et vous pouvez programmer le débogueur pour exécuter une commande particulière lorsque le point d'arrêt est atteint. This article a quelques bonnes informations d'introduction sur ces débogueurs, et the Q & A section near the end a un exemple de la façon d'effectuer une action quand un point de pain est frappé.