Question

J'ai un client qui m'a dit que mon programme (programme simple espace utilisateur, pas un pilote) se bloque son système avec écran bleu de la mort (BSOD). Il dit qu'il n'a jamais rencontré qu'avec un autre programme et qu'il peut le reproduire facilement avec le mien.

Le BSOD est de type CRITICAL_OBJECT_TERMINATION (0x000000F4) avec le type d'objet 0x3 (procédé): Procédé ou de fils crucial pour le fonctionnement du système a été inopinément sorti ou mettre fin

.

Est-ce qu'un simple programme responsable d'un BSOD (même sur Vista ...) ou doit-il vérifier l'installation du matériel ou OS?

Était-ce utile?

La solution

La meilleure façon de faire un BSOD avec un programme de l'espace utilisateur est (afaik) tuer le processus de sous-système Windows (csrss.exe). Cela n'a pas besoin d'un matériel défectueux, ni un bogue dans le noyau ou un pilote, il a besoin que des privilèges d'administrateur 1 .

Quel est votre code fait exactement? Le message d'erreur ( « Un processus ou un fil crucial pour le fonctionnement du système a inopinément ou été sorti fin. ») Sonne comme l'un des processus essentiels du système terminés. Peut-être vous tuer un processus et obtenu involontairement le processus ne va pas?

Si une certaine façon possible, vous pouvez essayer d'obtenir une image mémoire de ce client. À l'aide des Outils de débogage pour Windows vous pouvez alors analyser plus que décharge comme décrit ici .

1 Windows ne vous empêche pas de faire car " continue les administrateurs dans le contrôle de leur ordinateur ". C'est donc par la conception et non un bug. Lisez les articles de Raymond et vous verrez pourquoi.

Autres conseils

Juste parce que votre programme n'est pas un pilote ne signifie pas qu'il ne sera pas utiliser un pilote.

En théorie, votre code ne devrait pas être en mesure de BSOD l'ordinateur. Il est à l'OS pour vous assurer que ne se produise pas. Par définition, cela signifie qu'il ya un problème quelque part soit en matériel ou en code autre que votre programme. Cela ne fait pas obstacle à l'existence d'un bug dans votre code aussi bien que.

Réponse courte est oui. Réponse longue dépend de ce qui vous programme est supposé faire et comment il le fait?

Normalement, il ne devrait pas. Dans le cas contraire, il doit être soit

  • Un bug dans le noyau Windows (possible, mais très improbable)
  • Un bug dans un pilote de périphérique (pas nécessairement dans un dispositif utilisé par votre programme, cela pourrait être assez compliqué)
  • Une défaillance du matériel

Je parie que sur le nombre d'options deux (pilote de périphérique), mais il serait intéressant si vous pouviez nous obtenir une décharge plus détaillée.

Eh bien, oui, il peut - mais pour de nombreuses raisons différentes.

Voilà pourquoi nous testons sur des machines différentes, systèmes d'exploitation, le matériel etc ..

Avez-vous défini des exigences de votre programme et est votre utilisateur les suivez?

Si vous ne pouvez pas dupliquer vous-même et votre programme n'a pas besoin d'administrateur pour exécuter, je serais un peu suspicous au sujet

  • La stabilité du matériel de ce système
  • Le statut virus / programme malveillant de ce système.

Si vous pouvez obtenir un accès physique à la zone client, il est peut-être la peine de courir un virus scan complet avec un scanner mis à jour, et l'exécution d'un complet memtest sur elle.

J'avais un système qui semblait une fois stable, sauf que les programmes peu certian ne fonctionneraient pas sur (et se bloquait parfois la boîte). Memtest a montré ma RAM avait quelques mauvais morceaux, mais ils étaient dans sims o supérieur, donc ils ne se est accessible si un programme a essayé d'utiliser beaucoup de RAM.

Non, et qui est à peu près par définition. La pire chose que vous pouvez dire est qu'une application terrestre utilisateur peut avoir « déclenché » un bug Windows ou un bug du pilote. Mais un système d'exploitation de bureau moderne est entièrement responsable de sa propre intégrité; un BSOD est un échec de cette intégrité. Par conséquent, le système d'exploitation est responsable, et que le système d'exploitation.

(Exemple d'un bug BSOD que seul votre application pourrait exposer: un scanner de virus mis en œuvre en tant que pilote, qui se bloque lors de l'exécution d'un fichier du secteur 0xFFFFFFFF, un secteur qui sur cette machine arrive juste à contenir une DLL de votre application )

J'ai eu des problèmes lors de la sortie de mon application sans arrêter tous les processus et les connexions BD lorsque les extrémités du programme (je suis tombé l'ensemble IDE). Je place le « arrêt et la déconnexion » code dans le « Terminate » d'événement « Form_Closed » de ma forme principale et le problème résolu wa, je ne sais pas dans cette situation.

Un autre problème peut être si l'utilisateur tente d'accéder aux mêmes ressources que votre application utilise (bases de données, matériel, prises, etc.). Demandez-lui / elle de quelles applications il / elle utilise quand le BSOD arrive.

Un virus ne peut pas être mis au rebut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top