84 votes

Comment imprimer sur 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 pouvoir imprimer des éléments dans la fenêtre de sortie de Visual Studio, mais je ne peux pas, pour la vie, déterminer comment. J'ai essayé 'printf' et 'cout <<' mais mes messages restent obstinément non imprimés.

Existe-t-il un moyen spécial d’imprimer dans la fenêtre de sortie de Visual Studio?

126voto

Martin Liversage Points 43712

Vous pouvez utiliser OutputDebugString. OutputDebugString est une macro en fonction de vos options de génération, soit des cartes d' OutputDebugStringA(char const*) ou OutputDebugStringW(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 l' L préfixe:

OutputDebugStringW(L"My output string.");

Normalement, vous utilisez la macro version avec l' _T macro comme ceci:

OutputDebugString(_T("My output string."));

Si votre projet est configuré pour construire pour l'UNICODE, il va se développer sur:

OutputDebugStringW(L"My output string.");

Si vous n'êtes pas la construction de l'UNICODE, il va se développer sur:

OutputDebugStringA("My output string.");

27voto

Zac Points 570

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 du panneau et de l'ensemble:

  • Dans "linker->Système->sous-système dela" valeur "de la Console (/SUBSYSTEM:CONSOLE)"
  • Dans "C/C++->Préprocesseur->Définitions de Préprocesseur" ajouter "_CONSOLE" définir

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:

AllocConsole();
freopen("CONIN$", "r",stdin);
freopen("CONOUT$", "w",stdout);
freopen("CONOUT$", "w",stderr);

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.

12voto

Ringding Points 2400

Pour imprimer sur la "vraie" console, vous devez la rendre visible à l'aide de l'indicateur d'éditeur de liens / SOBSYSTEM: CONSOLE. La fenêtre de la console supplémentaire est agaçante, mais elle est très utile pour le débogage.

OutputDebugString s'imprime sur la sortie du débogueur lorsqu'il est exécuté à l'intérieur du débogueur.

2voto

MSalters Points 74024

Votre projet Win32 est probablement un projet graphique, pas un projet de console. Cela provoque une différence dans l'en-tête de l'exécutable. En conséquence, votre projet d'interface graphique sera responsable de l'ouverture de sa propre fenêtre. Cela peut être une fenêtre de console, cependant. Appelez AllocConsole() pour le créer et utilisez les fonctions de la console Win32 pour y écrire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: