Peut-on afficher la sortie de OutputDebugString dans la fenêtre de sortie de Visual Studio?
Je suis à l'aide de C# et Visual Studio; 2010.
Lorsque j'utilise OutputDebugString
d'écrire les informations de débogage, doit-elle apparaître dans la fenêtre de sortie?
Je peux voir la sortie de OutputDebugString
dans DebugViewmais j'ai pensé que je voudrais le voir dans Visual Studio de la fenêtre de Sortie. J'ai regardé
dans le menu Outils ? Options ? De débogage ? Général, et la sortie n'est PAS redirigé vers la fenêtre. J'ai aussi regardé dans le menu Outils* ? Options ? De débogage ? Fenêtre de sortie et tous les Paramètres de Sortie sont réglés sur "On". Enfin, j'ai utilisé la liste déroulante dans la fenêtre de Sortie de préciser que les messages de Débogage doit apparaître.
Si je change de menu Outils* ? Options ? De débogage ? Général de rediriger la sortie dans la fenêtre exécution, le OutputDebugString
messages ne s'affichent pas dans la fenêtre exécution.
Ici est l'ensemble de mon programme de test:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace OutputDebugString
{
class Program
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern void OutputDebugString(string message);
static void Main(string[] args)
{
Console.WriteLine("Main - Enter - Console.WriteLine");
Debug.WriteLine("Main - Enter - Debug.WriteLine");
OutputDebugString("Main - Enter - OutputDebugString");
OutputDebugString("Main - Exit - OutputDebugString");
Debug.WriteLine("Main - Exit - Debug.WriteLine");
Console.WriteLine("Main - Exit - Console.WriteLine");
}
}
}
Si je suis dans le débogueur, le Debug.WriteLine
de sortie apparaît dans la fenêtre de sortie, mais la OutputDebugString
de sortie n'a pas.
Si je lance à partir d'une fenêtre de la console, à la fois Debug.WriteLine
et OutputDebugString
apparaître dans DebugView.
Pourquoi ne pas le OutputDebugString
sortie jamais apparaître dans la fenêtre de sortie?
En fin de compte, mon intention n'est pas d'écrire beaucoup de la sortie de débogage avec OutputDebugString
je parlerai plutôt d'utiliser le Système.Diagnostics ou NLog ou quelque chose de similaire. Je suis juste essayer pour savoir, si je configurer une plateforme d'enregistrement d'écrire à OutputDebugString
la sortie sera visible à partir du débogueur.
Je suis retourné à mon programme original (pas le simple test ci-dessus) qui utilise TraceSources
et TraceListeners
configuré via le app.config
fichier. Si je configurer la trace des sources d'écrire à la System.Diagnostics.DefaultTraceListener
(qui est documenté comme écrit à OutputDebugString
), puis la trace de sortie de la source NE accédez à la fenêtre de débogage. Toutefois, les lignes qui écrivent directement avec OutputDebugString
(comme dans mon exemple simple) NE PAS aller à la fenêtre de débogage. Aussi, si j'utilise un autre TraceListener
qui écrit à OutputDebugString
(je suis un de Ukadc.Diagnostics sur Codeplex), que la production NE va PAS à la fenêtre de débogage.
Une remarque à propos de l'Ukadc.Diagnostics écouteur de trace... Ukadc.Diagnostics contient quelques traces d'auditeurs qui permettent une mise en forme personnalisée de sortie (similaire à la mise en forme qui sont disponibles en log4net, NLog, et de LABORATOIRE). Ainsi, avec "seulement" une dépendance sur Ukadc.Les Diagnostics que l'on peut utiliser "standard" .NET la journalisation des diagnostics, mais je peux obtenir certaines fonctionnalités avancées (comme la sortie de mise en forme) sans devenir dépendant d'un peut-être beaucoup plus grande plate-forme. Dans ce cas, je pourrais utiliser le Ukadc.Diagnostics OutputDebugStringTraceListener
d'écrire la sortie d'enregistrement dans la fenêtre de débogage dans le même format (si vous le souhaitez, ou un autre format), comme il le serait si elle était écrite dans un fichier.
Noter que j'ai vu ces questions, mais elles ne fournissent pas une solution de travail:
source d'informationauteur wageoghe
Vous devez vous connecter pour publier un commentaire.
Vous m'avez eu sur cette question pendant un moment. No way! .
Projet > Propriétés > onglet Débogage, tourner sur la "Activer le débogage de code non managé" case à cocher. Renommé "Activer le débogage de code natif" dans les VS versions. Avec le code non managé moteur de débogage est activé, OutputDebugString() de sortie est maintenant correctement intercepté et dirigé vers la fenêtre de Sortie.
Quand debuggging (Debug => Démarrer le Débogage F5), la mise en
Projet + Propriétés, onglet Débogage, cochez la case "Activer le débogage de code non managé"
fonctionne très bien.
Lorsqu'il n'est PAS de débogage (Debug => exécuter Sans Débogage CTRL+F5) vous mujst utiliser DebugView de SysInternals de la bibliothèque. Télécharger DebugView pour Windows v4.76
Il peut être affiché dans la "Fenêtre" au lieu dû à un paramètre:
Ou somethig comme ça.