2013-10-16 2 views
0

J'ai une fonction massive (1500 lignes de code) que j'ai besoin de déboguer. Je vais essayer de le décomposer, mais les outils disponibles ne sont pas à la hauteur. Donc, ce dont j'ai besoin entre-temps, c'est de pouvoir désactiver la mise en cache de l'écriture du DC à l'écran pour pouvoir déboguer rapidement. Y a-t-il un drapeau que je peux définir pour accomplir cela?Quelle est la manière la plus simple de déboguer une fonction de peinture dans MFC?

+1

En tant qu'optimisation des performances, le GDI effectue des opérations de rendu. Pour désactiver le traitement par lots pour un thread, vous pouvez appeler ['GdiSetBatchLimit (1)'] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd144846.aspx). Vous pouvez également vidanger explicitement les opérations de rendu en appelant ['GdiFlush()'] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd144844.aspx). – IInspectable

+0

@IInspectable Cela semble être la bonne réponse. Postez-le et je vais vous donner un crédit. – Adrian

Répondre

1

En tant qu'optimisation des performances, le GDI effectue un traitement par lots. Lorsque vous demandez à GDI d'effectuer une opération, il ne l'exécute pas toujours immédiatement. Au lieu de cela, il stocke dans un tampon et une fois que ce tampon est plein le lot est vidé et les opérations sont envoyées en mode noyau pour l'exécution. C'est ce que GDI fait par défaut et il n'y a généralement aucune raison de changer ce mode de fonctionnement.

Vous avez parfois besoin de contrôler la quantité de GDI en cours de traitement ou en cas de vidage, soit parce que vous affichez un CC hors écran et devez lire ces informations depuis la mémoire, soit à des fins de débogage.

Vous pouvez utiliser 2 appels API pour contrôler le traitement par lots. Pour lancer une vidange des opérations groupées, vous pouvez appeler le GdiFlush. Une fois cette API retournée, vous avez la certitude que toutes les opérations GDI ont été exécutées. Si vous souhaitez contrôler la quantité de traitement par lots effectuée, vous pouvez utiliser GdiSetBatchLimit. Pour désactiver le traitement par lots, appelez simplement GdiSetBatchLimit(1).

1

La façon dont je le fais:

  1. La meilleure façon est deux moniteurs havong.
  2. Le débogage à distance est également parfait, bien meilleur que le débogage sur la même machine. Vous pouvez le faire aussi avec une machine virtuelle.

Vous devez désactiver la double mise en mémoire tampon (utilisation de CMemDC).

Questions connexes