1

J'essaie de déterminer où les rapports d'erreur de Windows sont enregistrés; J'ai frappé Envoyer sur certains plus tôt aujourd'hui, mais j'ai oublié que je veux "voir les détails" afin que je puisse examiner les minidumps de la mémoire.Win32: Comment planter?

Mais je ne peux pas trouver où ils sont stockés (et google ne sait pas).

Donc, je veux écrire une application fictive qui va planter, afficher la boîte de dialogue WER, laissez-moi cliquer sur "voir les détails" afin que je puisse accéder au dossier où les dumps sont enregistrés.

Comment puis-je planter sur Windows?

Editer: La raison pour laquelle je demande est parce que j'ai essayé de déborder la pile, et la division en virgule flottante par zéro. Stack Overflow fait disparaître l'application, mais aucune boîte de dialogue WER n'est apparue. La division par virgule flottante par zéro entraîne + INF, mais pas d'exception, et pas de crash.

+0

j'ai eu une de ces fenêtres avec, GRATUITEMENT –

+0

@ M28: Vous devez contacter le développeur de l'application qui est de s'écraser. Dans mon cas, il s'agit de notre objet COM in-process chargé dans l'espace de travail de IIS6 par l'hôte de script ASP. –

+0

On l'appelle windows, où puis-je trouver son développeur? : B –

Répondre

2

devrait être un bon début:

int main(int argc, char* argv[]) 
{ 
    char *pointer = NULL; 
    printf("crash please %s", *pointer); 
    return 0; 
} 
+0

Peut-être souhaitez-vous définir le pointeur sur autre chose que NULL car c'est probablement ce que printf vérifie. 0xDEADBEEF peut-être? –

+0

J'ai utilisé votre idée, j'ai cast nul à un objet, puis j'ai commencé à appeler des méthodes. * boom * –

+0

@Billy ONeal: Ce n'est vraiment pas 'printf' qui plante, c'est la tentative de déréférencer un pointeur nul. 'printf' était simplement mignon,' char * pointer = NULL; char crash = * pointer; 'aurait aussi bien fonctionné. – KevenK

1

Vous supposez que les vidages mémoire sont toujours présents. Une fois qu'ils sont envoyés, AFAIK les dumps sont supprimés de la machine.

Les dumps eux-mêmes doivent être situés dans% TEMP% quelque part.

Pour ce qui est du plantage, ce n'est pas difficile, faites juste quelque chose qui provoque une erreur de segmentation.

+0

Il est assez difficile que mes deux premières tentatives ne pouvaient pas le faire. L'idée de KevinK, référençant l'adresse 0x00000000 travaillé. –

+0

Et vous semblez avoir raison, les vidages mémoire, sur XP, disparaissent une fois envoyés. Vista les conserve, dans le cadre du ** Centre de solutions et de rapports de problèmes **. –

0

Je ne sais pas si cela déclenchera l'erreur de dialogue de rapport, mais vous pouvez essayer la division par zéro.

+0

Cela fait juste une exception. Il ne plante pas sur Win32. (Notez que je ne veux pas dire des exceptions C++, je veux dire Win32 SEH) –

0
void crash(void) 
{ 
    char* a = 0; 
    *a = 0; 
} 
4

Vous êtes tous tellement bavards! :-)

Voici une manière compacte pour le faire:

*((int*)0)=0; 
+0

lol ... crash efficacement? – mpen

+0

:-) Vous devriez voir à quelle vitesse mes boucles inutilisées tournent aussi ... –

0

Les moyens bénéficiant d'un soutien pour déclencher un accident exprès peut être trouvé ici:

http://msdn.microsoft.com/en-us/library/ff545484(v=VS.85).aspx

En gros:

Avec les claviers USB, vous devez activer le clavier-initier d crash dans le registre . Dans la clé de registre HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ kbdhid \ Parameters, créez une valeur nommée CrashOnCtrlScroll et définissez-la comme sur une valeur REG_DWORD de 0x01.

Puis:

Vous devez redémarrer le système pour ces paramètres prennent effet.

Après cela est terminé, peut être lancé le crash clavier en utilisant la séquence suivante de raccourci clavier: Maintenez la touche CTRL droite, puis appuyez sur la touche Arrêt défil deux fois .

Aucune programmation nécessaire;) Pas de réinvention de la roue ici :)

+0

Comment cette méthode sait-elle quel processus est à moi que je débogue? (Question rhétorique, votre réponse est de déclencher une exception de mode noyau et un écran bleu, je veux déclencher la gestion de l'accident par défaut pour un processus en mode utilisateur - mon processus) –

+0

Mon mauvais. Je pensais que vous essayiez de déclencher un crash général pour regarder les fichiers de vidage, pas un crash de processus spécifique. – GWLlosa

0

Il est intéressant de savoir comment le plantage de Windows. Mais pourquoi ne pas jeter un oeil à

%allusersprofile%\Application Data\Microsoft\Dr Watson\ 

d'abord? Recherchez également les dossiers de crashdata spécifiques à l'application, par exemple.

...\FirefoxPortable\Data\profile\minidumps\ 

et

...\OpenOfficePortable\Data\settings\user\crashdata\. 
+0

Pourquoi? Pourquoi ne pas regarder là? Parce que je ne sais pas à propos de ce chemin - et ce dossier n'existe pas sur ma machine. –