Comment puis-je imprimer à la fenêtre de sortie de débogage dans une application Win32?
J'ai un projet win32 que j'ai chargé dans Visual Studio 2005. J'aimerais être en mesure d'imprimer des choses à la sortie de Visual Studio fenêtre, mais je ne peux pas pour la vie de moi quoi. J'ai essayé "printf" et " cout <<", mais mes messages restent obstinément non imprimé.
Est-il une sorte de moyen spécial de l'impression à la sortie de Visual Studio fenêtre?
- Notez que la Fenêtre de sortie Visual Studio n'est pas la console. Ils sont à la fois "de windows avec le texte en eux", mais sont différents dans les coulisses.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
OutputDebugString
.OutputDebugString
est une macro en fonction de vos options de génération, soit des cartes àOutputDebugStringA(char const*)
ouOutputDebugStringW(wchar_t const*)
. Dans ce dernier cas, vous devrez fournir une chaîne de caractères larges de la fonction. Pour créer un large littéral de caractère, vous pouvez utiliser leL
préfixe:Normalement, vous utilisez la macro version avec le
_T
macro comme ceci:Si votre projet est configuré pour construire pour l'UNICODE, il va se développer sur:
Si vous n'êtes pas la construction de l'UNICODE, il va se développer sur:
_T
(qui est le même queTEXT
seulement plus courte).myStr
. Est-ilchar*
,wchar_t*
ouLPTSTR
? En supposant que c'estchar*
vous suffit d'appelerOutputDebugStringA(myStr)
ou de l'utilisationOutputDebugStringW
avecwchar_t*
etOutputDebugString
avecLPTSTR
comme expliqué dans ma réponse.OutputDebugString
et soit définir les symboles de préprocesseur pour correspondre à la largeur des caractères que vous utilisez ou aller avec le flexible "T" de types qui vous permet de compiler à la fois en 8 et 16 bits caractères.OutputDebugStringW(L"My output string.");
?Si le projet est une interface graphique de projet, pas de console s'affiche. Afin de modifier le projet dans une console, vous devez aller dans les propriétés du projet panneau et set:
Cette solution ne fonctionne que si vous avez eu le classique "int main()" point d'entrée.
Mais si vous êtes comme dans mon cas (un openGL projet), vous n'avez pas besoin de modifier les propriétés, comme cela fonctionne mieux:
printf et cout fonctionnera comme d'habitude.
Si vous appelez AllocConsole avant la création d'une fenêtre, la console s'affiche derrière la fenêtre, si vous appelez après, il apparaîtra à l'avance.
EDITBIN
pouvez définir le sous-système deCONSOLE
même si vous utilisezWinMain
plutôt queint main()
.L'impression
real
de la console, vous devez le rendre visible à l'aide de l'éditeur de liens drapeau/SUBSYSTEM:CONSOLE
. L'extra fenêtre de la console est ennuyeux, mais à des fins de débogage, il est très précieux.OutputDebugString
impressions à la sortie du débogueur lors de l'exécution dans le débogueur.Examiner à l'aide de VC++ runtime Macros pour les Rapports _RPTN() et _RPTFN()
Exemple...
Ou vous pouvez utiliser le VC++ runtime fonctions _CrtDbgReport, _CrtDbgReportW directement.
_RPTF0
peut être utilisé là où aucune des variables devraient être passé après la chaîne de format. Le_RPTFN
macro, d'autre part, il faut au moins un argument à la suite de la chaîne de format.Si vous avez besoin de voir la sortie d'un programme existant qui a largement utilisé printf w/o changer le code (ou avec un minimum de modifications), vous pouvez redéfinir printf comme suit, et les ajouter à l'en-tête commun (stdafx.h).
Si vous souhaitez imprimer décimal variables:
Votre projet Win32 est probablement un GUI projet, pas un projet console. Cela entraîne une différence dans l'exécutable d'en-tête. En conséquence, votre GUI de projet sera responsable de l'ouverture de sa propre fenêtre. Que peut être une fenêtre de console, si. Appel
AllocConsole()
pour la créer et utiliser la console Win32 fonctions de l'écriture.Je cherchais un moyen de faire moi-même et a trouvé une solution simple.
Je suis en supposant que vous avez commencé un défaut Win32 Projet application Windows dans Visual Studio, qui offre une fonction "WinMain". Par défaut, Visual Studio définit le point d'entrée pour le "sous-système:WINDOWS". Vous devez d'abord changer cela en allant à:
Projet -> Propriétés -> Linker -> Système -> sous-système de
Et sélectionnez "Console (/SUBSYSTEM:CONSOLE)" à partir de la liste déroulante.
L'instant, le programme ne sera pas exécuté, depuis un "principal" de la fonction est nécessaire, au lieu de la fonction "WinMain".
Alors maintenant, vous pouvez ajouter un "principal" de la fonction comme vous le feriez normalement en C++. Après cela, pour démarrer l'interface graphique du programme, vous pouvez appeler la fonction "WinMain" de l'intérieur de la "main" de la fonction.
La partie initiale de votre programme devrait maintenant ressembler à ceci:
Résultat de ma mise en œuvre
Maintenant, vous pouvez utiliser des fonctions pour la sortie de la console dans n'importe quelle partie de votre programme graphique pour le débogage ou à d'autres fins.
Vous pouvez également utiliser WriteConsole méthode pour imprimer sur console.