2009-09-08 11 views
1

J'ai écrit une application C# windows qui effectue certaines opérations intensives en DB. (Connecteur MySQL v6). Lors de l'exécution du projet en mode débogage, tout fonctionne correctement. Toutefois, lorsque j'exécute le prject en mode release, il quitte parfois l'opération à mi-chemin - sans message d'erreur, rien dans les journaux d'événements, etc.Application C# windows OK en mode débogage, en mode de sortie défectueux

Quelle serait la meilleure façon de déboguer le mode release - quand tout fonctionne en mode debug ?

Merci pour toute aide,

Bob

+0

Est-il reproductible ou il se ferme au hasard? Y a-t-il des entrées dans le journal des événements de l'application? – BobbyShaftoe

+1

Umm ... asp.net et webforms dans les tags, mais "windows app" dans le texte? Les deux sont mutuellement exclusifs, vous savez: normalement "app Windows" signifie Winforms. Alors, c'est quoi? –

+0

ma faute -typage trop rapide! Application Windows - pas webforms ... Désolé! (J'ai essayé d'éditer le message et enlever les étiquettes mais aucune joie ...) –

Répondre

0

Bobby est correct de demander au sujet de journal des événements. S'il bombarde sur une erreur .NET, il sera probablement enregistré.

Si cela ne vous donne rien, enroulez l'application entière dans un bloc try/catch. Sur votre gestion des exceptions, consignez l'erreur (journal d'application, fichier, etc ...). Assurez-vous que vous vous connectez pour capturer la pile d'appels.

+2

Ack! N'enveloppez pas tout dans try/catch, utilisez AppDomain.UnhandledException (http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx) –

+0

La façon la plus simple de capturer la pile d'appels est de utilisez la méthode ToString pour extraire le texte de l'exception au lieu de la propriété Message. L'autre astuce consiste à s'assurer de ne jamais renvoyer une exception avec "throw ex". Utilisez "throw", qui renvoie sans perdre la pile des appels, ou lance une nouvelle exception qui inclut l'original comme exception interne. –

+0

Malheureusement, il n'y a rien dans les journaux des événements (y compris le journal des événements de l'application) Je vais étudier et implémenter AppDomain.UnhandledException, et faire part de mes commentaires. Merci beaucoup! –

1

Vous pouvez créer un fichier journal et demander à l'application d'écrire des lignes avec les informations de votre choix, de la même manière que la console peut être utilisée à des fins de débogage dans une application de formulaire Windows. Vous pouvez écrire des valeurs de certaines variables dans ce fichier, ou même simplement écrire des phrases distinctes dans des endroits sélectionnés du code qui vous aideront à détecter où le programme est en cours d'exécution quand il échoue.

0

J'ai exactement le même problème - l'application s'exécute en mode débogage et échoue en version. Effectuez les opérations suivantes:

  1. Wrap tout Program.cs dans try {} .. bloc catch {} et il affichera une raison
  2. Je ne sais pas pourquoi, mais ma demande a échoué sur Program.SetCompatibleTextRenderingDefault () fonction avec un message qu'il devrait être appelé avant toutes les instances sur IWin32Window ou quelque chose comme ça

Il est des erreurs très étranges pour moi parce que je n'avais aucun code avant cette fonction. Mais vous pouvez essayer - peut-être qu'il montrera quelque chose d'utile pour vous

Questions connexes