Un genre d'outil de vidage pour générer automatiquement des idées de conception

En tant que développeur, très probablement rencontrer divers bug dans le programme, puis de reproduire le bug selon la description, debug, modifier. Lorsque le bug peut être reproduit stable rencontré, alors il sera relativement facile de modifier beaucoup, au moins vous savez où est le problème, voici comment le bug.

Mais parfois, notre programme, il y aura quelques exceptions près, comme coincé soudainement sans réponse, erreur d'exécution, flash back et ainsi de suite. Eh bien, cette fois-ci, il est difficile de reproduire sur les lieux, nous avons besoin d'utiliser d'autres moyens log ou rapport d'erreurs pour l'analyse.

La raison pour laquelle nous pouvons être en mesure de se connecter grâce à des procédures inhabituelles d'un jugement général, mais parce qu'il n'y a pas spécifique, il est difficile de localiser avec précision le point crucial d'une partie inconnue anomalie.

Cette fois-ci, nous avons besoin de l'aide d'un certain nombre de méthodes, procédures lorsque des anomalies se produisent, qui traitent ensuite les informations pour le vidage du fichier de vidage, l'analyse du fichier de vidage, nous pouvons voir que le programme « mort » (anormal) quand il était une information de mémoire, les détails de la pile, et d'autres fils liés à l'information.

Bien sûr, le but principal de cet article est de vidage pas une analyse, mais comment sauvegarder le fichier de vidage, comment faire d'autres procédures de traitement lorsque « mort », ce qui donne au programme une vie décente « enterrement. »

Ici, nous allons introduire un petit outil pour le développement afin de répondre à cette demande à l'exception du programme vider la décharge.

 

généré fichier de vidage

il y aura conscience lorsque nous avons développé dans un code de gestion des exceptions qui peuvent survenir, de manière à assurer la stabilité du programme. Par exemple, en C ++ essayer ...... catch, Delphi est d'essayer ...... sauf dans la suite.

Mais il y a toujours des anomalies inattendues que nous sommes, et ces anomalies conduisent souvent notre programme sur « mort ». Alors, comment, lorsque ces exceptions se produisent, nous serons programme alimentaire « mort » hors de lui après tout? Le programme des funérailles avant la cuisson est propre arrangements « morts », ou par celle-ci pour la cuisson par d'autres programmes?

La première question ↓

Tout d'abord, le programme en face d'une anomalie inconnue, peut être utilisé comme un fichier de vidage de vidage de traitement unifié, puis notifier à l'utilisateur rencontre une anomalie d'un inconnu, que ce soit d'envoyer un rapport d'erreur et ainsi de suite, laisser le programme mourir respectable.

La deuxième question ↓

Programme de funérailles elles-mêmes ou à la nourriture par d'autres programmes. Ici, il devrait être tout est OK, mais ces deux méthodes ont leurs propres avantages et inconvénients de celui-ci. Donc, je dirais les deux. Bien sûr, l'objectif de cet article est la dernière approche.

 

MÉTHODE 1

Programme dans les « morts » devant ses propres arrangements funéraires

Tout d'abord, pour un programme sous Windows, comment générer un fichier de vidage de vidage leur processus?

Sous Windows, MS Dbghelp.dll nous fournit une bibliothèque dynamique, il fournit une méthode MiniDumpWriteDump, on peut vider la décharge.

Maintenant que nous savons que la décharge de vidage de la méthode, le prochain problème à résoudre est lorsque la décharge de décharge.

Ici pour nous parler de SetUnhandledExceptionFilter cette fonction, lorsqu'une exception est pas gérée, le système appellera SetUnhandledExceptionFilter défini un gestionnaire d'exception pour effectuer certains traitements en passant la fonction de rappel. Cette fois-ci, nous serons dans la fonction de rappel pour traiter les informations du programme en cours de vidage de la décharge.

Cette procédure lorsqu'une anomalie inconnue, une certaine gestion des exceptions par la fonction de rappel, peut nous aider à décharge de capture lorsque la plupart des exceptions, comme l'adresse d'accès illégal, fil interblocages, et ainsi de suite.

Mais cette méthode a aussi un peu impuissants, si le programme lui-même il n'y a pas de réponse, l'ensemble du processus de la carte est mort ou est le fil conducteur du programme apparu dans une boucle infinie, et à l'arrière flash durée d'exécution, le programme lui-même il est difficile de faire face à l'émergence d'anormal, ou n'a tout simplement pas eu le temps de traiter.

Lorsque le programme lorsque le « mort » ne peut pas se permettre ou ne pas avoir le temps d'organiser les funérailles de son temps, nous avons besoin peut-être un autre programme pour l'aider à traiter. Ensuite, nous devons mettre en évidence comment utiliser un autre programme, tenir un programme décent au « funérailles » pour notre « mort ».

 

MÉTHODE 2

 Dans le programme lorsque « morts », et d' autres programmes à ses funérailles

Ici, nous allons utiliser un petit outil pour écrire leur propre suivi du programme spécifié, pour lequel certains des funérailles cuisaient au moment de son apparence inhabituelle. Mais puisqu'il est l'utilisation d'outils supplémentaires pour le contrôle, alors vous devez jouer un nouveau processus, et une fois que ce processus est terminé accidentellement, il pourrait conduire à la surveillance de l'échec.

C'est donc là les inconvénients de cette méthode, mais cette méthode a ses avantages existent: Parce qu'il est un processus supplémentaire, donc quand la mort de la carte de processus de surveillance, il ne sera pas affecter le fonctionnement des procédures de contrôle. En même temps, nous pouvons faire un petit outil écrit à l'appui des arguments de ligne de commande à surveiller en fonction des paramètres passés.

Pour la plupart du programme sous Windows peut appeler universel, plus besoin d'atteindre une anomalie inconnue poignée dans le programme pour ajouter du code pour l'accorder tout a commencé quand on peut écrire l'outil.

Si vous utilisez un programme supplémentaire pour surveiller un programme spécifié, quand il apparaît anormal, faire un traitement de suivi, les deux premiers problèmes sont confrontés:
● Un problème: Comment puis-je savoir les procédures de suivi du programme à surveiller anomalie a été commise;
● Deuxième problème: quoi faire lorsqu'une exception suit apparaît du programme.

Il existe deux fonctions API Win32 peuvent nous aider à résoudre un problème, ils sont IsHungThread et IsHungAppWindow, le béton peut être utilisé en référence à la description détaillée sur msdn. Voici un bref aperçu de ce qu'ils peuvent gérer le processus d'entrée afin de déterminer si le processus actuel est dans un état de la réponse normale.

Lorsque le programme suivi, il y a eu une réaction anormale, et remplir certaines conditions, nous pouvons penser qu'il était anormal, le prochain ou dire que ce n'est pas un état idéal du.

Après avoir résolu le premier problème, nous avons déjà une méthode de suivi du programme à surveiller anormal, l'étape suivante consiste à programmer pour le traitement de l'anormal. Le but du traitement est demande également à l'utilisateur de programme est apparu anormal, tout en générant le fichier de vidage. L'introduction de dbghelp.dll mentionné ci-dessus, nous pouvons utiliser la fonction pour générer où la décharge, mais il peut exiger une partie de code pour la mise en œuvre.

Ici, d'introduire un autre outil pour nous de fournir MS: ProcDump, cet outil peut être invoqué par la ligne de commande, comme le processus spécifié vidage de vidage effectuées, vous pouvez utiliser la commande suivante:

-ma est un paramètre de vidage, exprimées dans ce mode de sous-évalués. 

Ma vider la totalité du montant, il est sur tous les processus liés à la décharge de l'information. 

décharge mp est seulement des informations utiles. Introduire la description spécifique peut se référer à la documentation msdn. 

8978 id de processus de traitement correspondant. 

Test.dmp est le nom de la décharge après le fichier de vidage.

Donc, quand on sait que les procédures anormales apparaissent à surveiller, il peut être une décharge en appelant cet outil dans le programme.

Pour deux problèmes auxquels sont confrontés ont maintenant une solution après. Nous pouvons atteindre nos besoins en programmation: la préparation d'un programme de suivi, de décharge et de décharge d'exception et certains apparaissent dans son traitement ultérieur.

Selon cette demande, j'utilise Delphi pour développer la réalisation simple de ce gadget. nous présentons les idées, mettre en œuvre et à utiliser ici.

 

mettre en place des idées de jauge

Lorsque le programme de surveillance des exceptions spécifiées, générer automatiquement des gadgets de vidage (ci-après dénommé outil) idée est: lorsque le programme (à surveiller) pour commencer, puis en lançant l'outil, l'outil fonctionnera en arrière-plan. Outil maintient une minuterie en réponse à la situation, un suivi régulier du programme. Lorsque l'application ne répond pas et remplir certaines conditions, boîte d'invite pop-up, programme de présentation qui ne répond pas, ce qui permet aux utilisateurs de sélectionner l'action appropriée, par exemple, si pour générer et envoyer une décharge comme.

Lorsque l'on considère l'utilisation d'une minuterie pour surveiller l'exception du programme, au milieu, il y aura un certain intervalle de temps, si le flash back du programme, il était difficile de saisir l'exception. Par conséquent, un autre besoin de méthodes supplémentaires pour traiter le cas d'un tel flash back. Ici, nous avons aussi d'utiliser des outils de ProcDump mentionnés ci-dessus.

Il a une commande intégrée: ProcDump -ma -e pid dump.dmp
-ma est le mode de vidage
-e est les paramètres de commande, abréviation d'exception
Pid est le procédé de l'identifiant indiqué ci - dessus
dump.dmp est le nom de la décharge

Lorsque vous utilisez cette commande pour démarrer ProcDump cet outil, il aurait été exécuté et surveiller le programme spécifié en arrière-plan, prenez décharge dans le dos flash ou autres anomalies.

Ainsi, la combinaison de ces deux méthodes, nous pouvons développer une idée claire: l'utilisation de la minuterie surveille le processus spécifié est dans un programme d'Etat ne répond pas, principalement ciblé ne répond plus, le cycle de la mort et d'autres anomalies, ProcDump en utilisant la ligne de commande surveillance flash back du programme spécifié ou une erreur opération et similaires.

 

réelle méthode actuelle

Ici surtout introduire l'idée principale mis en œuvre, selon les étudiants qui sont intéressés peuvent également utiliser votre propre bon langage de développement est mise en œuvre codée. Donc pas affiché le code source.

1. Maintenir une minuterie

Fonction de minuterie de traitement des messages, le calendrier du processus de suivi de l'information entrante, s'il n'y a pas de réponse, et certaines conditions sont remplies (temps de réponse de plus de 5 secondes), le processus peut atteindre la norme d'une décharge, interface pop-up correspondant permet à l'utilisateur de l'opération de sélection.

 

fonction 2.CheckProcessResponse

Minuterie gestionnaire de messages, une fonction de synchronisation pour appeler le programme de surveillance de l'état de réponse. En utilisant les fonctions API Win32: IsHungThread ou IsHungAppWindow, correspondant à la poignée de traitement entrant, en réponse à l'état du processus est obtenue, et ensuite renvoie les valeurs correspondantes sont traitées.

En même temps, cette fonction vérifie les paramètres fournis, si aucun problème, l'utilisation directe des paramètres passés comme un objet à surveiller. Si le chèque est pas adopté, il nouveau processus d'accès à l'information ID, poignée, etc. en fonction du nom du programme entrant, des fenêtres, etc., puis surveiller. Si vous ne pouvez toujours pas obtenir la bonne information (tels que les processus n'existent pas, etc.), sera hors service.

Dans le premier terme du programme, va créer un fil pour appeler des fonctions MonitorExceptionByPid pour lancer ProcDump suivi du programme spécifique, l'objectif principal du programme est utilisé pour capturer l'exception et décharge de vidage lors du retour du flash.

 

fonction 3.CreatDump

En l'absence de réponse au processus de suivi et de l'état apparaît pour générer des fichiers de vidage sont remplies, la fonction sera appelée pour générer un fichier de vidage.

Grâce à la ligne de commande procdump.exe appel (32 bits) ou programme procdump64.exe (64 bits), à partir des paramètres passés à générer le fichier de vidage, la figure est illustré le débogage détails de la ligne de commande:
-mp exprimée en l'ensemble moyen de générer décharge

8656 est le processus de surveillance ci - dessus identifiant indiqué
décharge \ 20.160.912.195.751 est un chemin de stockage et le nom du fichier de vidage
Remarque: Si vous avez un ordinateur pour télécharger windbg, utilisez être jeté un ProcDump 32 bits lorsque la décharge peut échouer. Si sûr utilisé de préférence 64 à benne basculante, les systèmes 32 bits avec 32 bits ira décharge.

Une fois le fichier de vidage est généré, le prochain appel outil de compression 7Z pour compresser et supprimer le fichier de vidage d'origine. Ci-dessous le détail commande de compression 7Z:

Ajout représente un fichier compressé dans le vidage de fichier compressé \ 20160912195751.zip est un chemin de fichier compressé et le nom du
vidage \ 20160912195751.dmp être un chemin de fichier compressé et nom de la
compression du temps prendra un certain temps, de sorte que le programme exécuté dans la ligne de commande lorsqu'il est utilisé CreateProcess réalisée en attendant qu'elle se termine après l'exécution, allez dans le fichier d' origine opération de suppression, assurant ainsi les fichiers normaux et compressés sont supprimés.

 

fonction 4.MonitorExceptionByPid

Lorsque l'outil est appelé, il crée un thread appelle cette fonction. Cette fonction appellera programme procdump.exe conformément à l'ID de processus du processus spécifié pour surveiller. Lorsqu'une exception se produit processus contrôlé (accidents, flash back, etc.), il saisira l'exception et décharge décharge.

Mais cette fonction car il est l'ordre ProcDump de remplir la fonction de surveillance d'appel, il ouvre un processus de ProcDump dans le Gestionnaire des tâches.

Exception pris lorsque la fonction est alors exécutée à la fin, il obtiendra régulièrement un code de sortie de fil dans le gestionnaire de la minuterie. Si le traitement de corrélation de sortie anormale est effectuée catchException, si le programme de surveillance est une sortie normale, ne traitent pas.

 

fonction 5.SendEmail
selon l'expéditeur prédéterminée, le destinataire, la transmission du fichier d'image comprimé généré à la rétroaction d'erreur de boîte aux lettres spécifiée aux développeurs pour faciliter le processus. Si le flash cas de retour, après l' envoi d' e-mail programme quittera automatiquement.

 

6.ClearOutTimeFile
tous les outils au démarrage, générer automatiquement la date plus d'une semaine pour nettoyer la décharge et de ses fichiers compressés, pour prendre moins d' espace de stockage.

 

7. D' autres méthodes de la fonction
Ceux - ci sont énumérées ci - dessus quelques idées pour réaliser la fonction principale d'un certain nombre d'autres fonctions pour aider à la réalisation des fonctions mentionnées ci - dessus, peuvent être ajoutés en fonction de leurs propres besoins.

 

◤ en utilisant la méthode

1. invocation de la méthode de ligne de commande de cet outil
est de surveiller le programme au démarrage, démarrez l'outil à partir du programme de ligne de commande, vous devez passer les paramètres suivants lorsque vous appelez:
● Nom du programme: par exemple pbrc.exe
● Processus ID: programme de surveillance de processus ID (si la valeur par défaut ou mauvais, alors il réacquérir des outils selon le nom du programme en cours)
● le titre du formulaire: « clients institutionnels de l' organisation de la gestion des placements de courtage (de RC_20160729) » par exemple
● poignée de processus: un programme suivi du processus poignée (sinon pour ouvrir le cas, par défaut ici)
● envoyer l' adresse e-mail: par exemple [email protected]
● e-mail nom de l' expéditeur: par exemple liudq
[par exemple]

Vous pouvez utiliser la ligne de commande suivante pour appeler cet outil:
ProjectDumpTest.exe pbrc.exe 9999 système de courtage institutionnel clients institutionnels de gestion des investissements (RC_20160729) 345678 [email protected] liudq
ProjectDumpTest.exe: utilitaire nom
Pbrc.exe: à surveiller nom du programme
9999: pour suivre l'avancement du programme est l'ID
système institutionnel de gestion des clients institutionnels d'investissement de courtage (RC_20160729): titre du formulaire est le programme contrôlé
345 678: être converti en une valeur de chaîne après que le programme de surveillance poignée de fenêtre, le programme puis converti HWND
[email protected]: pour envoie un rapport d'exception adresse du destinataire
liudq: le nom de l' expéditeur est envoyé lorsque le rapport d'exception

2. doit chemin de stockage de fichiers et d' autres
besoins du programme et procdump.exe, procdump64.exe les programmes stockés dans le même chemin, mais si vous avez besoin de le compresser, doivent également mettre programme 7z.
Après un outil de surveillance du programme à surveiller, et ne répond pas à répondre à certaines conditions, les appels procdump.exe (système 32 bits) ou procdump64.exe (systèmes 64 bits) pour générer le fichier de vidage correspondant.

3.Dump chemin de fichier et le processus de génération 
pour générer le fichier d'image sont stockées dans le répertoire de programmes de répertoire de vidage (comme nouveau) dans le
fichier de vidage de benne à cause est trop importante, l'outil génère après la décharge, effectue la compression des opérations. Après la fin des fichiers compressés de compression retirés, laissant le fichier compressé.

Comme on peut le voir par nom de fichier du programme de vidage apparaît le temps ne répond pas est à 13:30:38 le 12 Septembre 2016, selon les fichiers de sauvegarde et journaux pour changer la période de temps, le programme peut être plus facile de trouver la cause semble ne répond pas.

En même temps, en raison de la toujours grande après la compression de fichier de vidage, s'il y a eu un disque, il serait plus original appartenant à des coûts, donc à chaque fois que l'outil est activé, les fichiers de vidage dans les contrôles de répertoire de vidage (fichier compressé) créé de temps, si il est au-delà de la date fixée (en supposant que plus d'une semaine), puis nettoyage supprimé pour libérer de l'espace de stockage. programme d'envoi compresse après la compression est terminée fichier à la boîte aux lettres spécifiée eux.

4. Dans le cas du traitement à ouvrir (à ajouter pour traiter le cas d'une seule ouverture pour un traitement ouvert mature)
lorsqu'un utilisateur ouvre une pluralité de programmes à surveiller, le processus sera une pluralité du même processus nom exe, mais le processus de cet outil est seul . Dans ce cas , ces processus sont le processus seront suivis régulièrement, un événement surveillé qu'un processus semblait ne répond pas, videra le processus de mise en miroir de la mémoire individuelle, génère la décharge, ou jusqu'à ce que le processus est de retour à la normale lorsque vous redémarrez (l'équivalent d'un nouveau processus), il continue à surveiller.

L'outil en cours d' exécution et de sortie des
outils peuvent être gérés directement par l'exe de départ, au cas où les valeurs par défaut définies par le programme seront utilisés pour fonctionner comme l'objet. Dans les paramètres généraux de ligne de commande et une référence au contenu de la commande est surveillée en utilisant la ligne de commande pour démarrer le programme, le besoin à travers.

A outils d'exécution, si elles surveillent le programme ne semble pas état non réactif, etc., il aura été exécuté en arrière-plan, invisible à l'interface utilisateur. En l'absence de réponse à l'état de surveillance, etc., permettra d'améliorer l'interface correspondant au pop-up, de sorte que l'opération de sélection.

Comme indiqué ci - dessus (soit l' aménagement paysager), il peut être traité par les options de l' utilisateur fournies.
Quand tout le processus n'existent pas contrôlé, l'outil se terminera automatiquement exécuté.

Publié un article original · louange gagné 0 · Vues 2711

Je suppose que tu aimes

Origine blog.csdn.net/yjj350418592/article/details/105331972
conseillé
Classement