30 septembre 2010
publié par 
Une station de travail sous Windows a généralement entre 50 et 100 processus qui cohabitent et partagent les ressources (processeurs, RAM, disques...). La sécurité accrue des versions actuelles de Windows permet dans le cas général une cohabitation efficace de tous les processus et services lancés. En effet notamment grâce au multitâche préemptif, à la signature des pilotes, à la prévention des données au contrôle des installations involontaires par l'UAC (...), le système assure la bonne marche des applications.

Cependant aucune application n'est à l'abri d'une machine "récalcitrante". Un traitement va s'exécuter sur des centaines de stations, mais sur une station il sera bloqué par un message d'arrêt de Windows "GPF / Ce programme va être arrêté...". Plus complexe encore, l'application va fonctionner un temps, puis sans aucun changement apparent va s'interrompre aléatoirement, ou définitivement, avec l'affichage d'une erreur.

Tant qu'il s'agit d'un déclenchement du mécanisme de sécurité du WLangage, il reste possible de rechercher une solution à l'aide du dump de débogage, et d'avoir un scénario de reproduction. Mais lorsqu'il s'agit d'un arrêt par Windows "Ce programme va être arrêté...", "L'application a cessé de fonctionner ... " (il s'agit de GPF - General Protection Fault), les possibilités de recherche s'amenuisent. De plus dans pareil cas :
  • il est le plus souvent impossible de parvenir à reproduire le cas sur le poste de développement, malgré la récupération des données de production, et l'application scrupuleuse des actions de l'utilisateur.
  • les investigations de base en cas de défaut de configuration ne donnent aucun résultat :
    • vérifier que l'application n'est pas passée dans la liste de surveillance du mécanisme FHT de Windows, son exécutable ou ses DLL ne doivent donc pas apparaître dans les 3 clés de registre suivantes :
      • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\State
      • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
      • HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
    • consultation de l'observateur d'évènements de Windows,
    • réinstallation de l'application,
    • vérification de l'installation de tous les correctifs Windows update,
    • mise à jour des pilotes de périphériques à partir de ceux fournis par les fabricants,
    • arrêt pour test de la prévention des données du système,
    • vérification disque, réseau, RAM,
    • arrêt successif des processus lancés en parallèle pour une détection de conflit,
    • retour arrière sur la configuration avec un point de restauration ...

Bien que le Support Technique Gratuit ne puisse pas à distance et sans reproduction découvrir la cause d'une défaillance ponctuelle, il y a cependant une solution pour obtenir au moins une orientation des recherches.

En effet Windows peut donner en cas d'arrêt des informations de débogage sous la forme d'un "DUMP" ou "Vidage mémoire". Pour obtenir un "DUMP", il suffit de recompiler une version de l'application avec un appel de la fonction dbgInfo. Son option dbgActiveDumpSystème permettra d'avoir une génération d'un "DUMP" dès qu'une erreur mémoire survient. Si l'application ne peut pas être recompilée, il est possible d'utiliser un utilitaire spécialisé pour activer la création d'un "DUMP".

Voici le processus à appliquer avec "ProcDump" :
  • télécharger ProcDump,
  • décompresser l'archive dans un dossier,
  • ouvrir l'invité de commande en tant qu'administrateur :
    • sous Windows 10 : clic droit sur le menu "Démarrer" puis "Invité de commande (admin)",

    • avant Windows 10 : menu "Démarrer", rechercher "CMD", clic droit sur "Invité de commande (MS-DOS)" et choix "Exécuter en tant qu'administrateur.

  • Exécuter ProcDump avec la ligne de commande -i -ma :

  • lancer le programme dont l'exécution est interrompue anormalement : un DUMP est automatiquement généré dans le dossier dans lequel a été installé ProcDump. l'utilisateur Windows en cours doit donc disposer de droit d'écriture sur l'emplacement.
    Il est possible d'ajouter un emplacement spécifique pour la création des DUMP, en ajoutant le dossier dans la ligne de commande : procdump -ma -i d:\dossier_dump
Le DUMP obtenu est utilisable par notre équipe Développement. Il permet de voir les modules du Framework en cours d'exécution, les appels au système qui n'ont pas pu aboutir. Cela permet donc dans la majeure partie des cas d'orienter les recherches.

Pour faire expertiser ce DUMP, il suffit de le déposer sur un serveur (Web, FTP, Hubic, Dropbox), et d'utiliser l'option "Requête au Support Technique" du bouton "Aide" du ruban de WINDEV. Il faut préciser au travers de l'assistant :
  • le lien permettant de télécharger le DUMP (via une archive ZIP),
  • la version exacte de Windows sur laquelle le DUMP est généré (ex : Windows 2008 64 bits SP1),
  • toutes les informations relatives aux particularités de la configuration,
  • le mode de compilation de l'application (32 ou 64 bits),
  • la version interne du framework avec laquelle l'application à l'origine du DUMP s'exécute (ex : 200066P).

< Retour