2009-12-18 8 views
5

Je voudrais savoir s'il existe une commande ou un outil qui peut être utilisé pour démarrer un processus et le mettre en pause immédiatement.Comment démarrer un processus et l'interrompre immédiatement?

J'ai besoin de cette fonction pour avoir le temps d'y attacher un débogueur. J'ai essayé la fonctionnalité visual studio/debugexe, mais le comportement du programme a semblé changé. J'ai donc besoin de trouver un autre moyen de l'attacher et de le déboguer.

Merci.

+2

Je suppose que le vrai problème est que vous avez une condition de concurrence ou un autre problème de simultanéité, et donc simplement l'exécuter sous un débogueur provoque le problème de se cacher. –

+0

Merci à tous pour avoir fourni des commentaires utiles sur mon problème. Parce que je développe un plug-in pour le programme, je ne peux pas modifier le code source du programme hôte. Par conséquent, les solutions fournies par sharptooth et nobugz seraient plus adaptées à mon problème. Je suppose que nous devons modifier le programme hôte pour utiliser la solution de Samuel Klatchko et Rytmis. – askalee

Répondre

4

Vous pouvez utiliser CreateProcess() avec l'indicateur CREATE_SUSPENDED. Cela va démarrer le processus avec le thread principal suspendu. Ensuite, vous appelez ResumeThread() après avoir joint.

0

Que diriez-vous d'ajouter un appel Sleep() comme toute première déclaration.

+0

Cela fonctionnera la plupart du temps. Mais si le problème réside dans quelque chose qui se passe avant l'appel de WinMain(), il sera inutile. – sharptooth

0

Vous pouvez également ajouter un appel à

System.Diagnostics.Debugger.Break(); 

dans le code. Il suspend le programme et vous demande ensuite de choisir le débogueur que vous voulez utiliser. Vous pouvez ensuite vous connecter à une instance Visual Studio en cours d'exécution. Si vous utilisez déjà un débogueur, il se cassera simplement comme s'il avait atteint un point d'arrêt.

Questions connexes