2009-12-18 11 views
5

Chciałbym wiedzieć, czy istnieje jakieś polecenie lub narzędzie, które może być użyte do rozpoczęcia procesu, a następnie natychmiast go zatrzymać.Jak rozpocząć proces, a następnie natychmiast go zatrzymać?

Potrzebuję tej funkcji, aby mieć czas na dołączenie do niej debuggera. Próbowałem funkcji visual studio/debugexe, ale zachowanie programu wydawało się być zmienione. Muszę znaleźć inny sposób na dołączenie go i debugowanie.

Dziękuję.

+2

Podejrzewam, że prawdziwy problem polega na tym, że masz problemy z wyścigiem lub inną kwestią współbieżności, a więc po prostu uruchomienie go w debugerze powoduje, że problem się ukrywa. –

+0

Dziękuję wszystkim za dostarczenie użytecznych komentarzy do mojego problemu. Ponieważ opracowuję wtyczkę do programu, nie mogę zmodyfikować kodu źródłowego programu hosta. Dlatego rozwiązania dostarczone przez sharptooth i nobugz byłyby bardziej odpowiednie dla mojego problemu. Sądzę, że musimy zmodyfikować program nadrzędny, aby użyć R Samuela Klatchko i rozwiązania Rytmis. – askalee

Odpowiedz

4

Możesz użyć CreateProcess() z flagą CREATE_SUSPENDED. Spowoduje to uruchomienie procesu z zawieszonym głównym wątkiem. Następnie wywołujemy ResumeThread() po dołączeniu.

0

Jak dodać połączenie Sleep() jako pierwsze zdanie.

+0

To będzie działać przez większość czasu. Ale jeśli problem leży w tym, co dzieje się przed wywołaniem WinMain(), będzie to bezużyteczne. – sharptooth

0

Można również dodać wywołanie do

System.Diagnostics.Debugger.Break(); 

w kodzie. Spowoduje to zawieszenie programu, a następnie poprosi o wybranie debuggera, którego chcesz użyć. Następnie możesz dołączyć do działającej instancji programu Visual Studio. Jeśli już korzystasz z debuggera, po prostu się zepsuje, jakby trafił w punkt przerwania.

Powiązane problemy