c ++ - Kan jeg spaere processer knyttet til en kørende debugger?

Indlæg af Hanne Mølgaard Plasc

Problem



Forestil dig, at jeg har et program, der gyder nogle processer (pseudokode)


main() {
   p1 = Spawn( "ClientProcess" );

   WaitForEventFrom( p1 );
}


Kan det være muligt at opdage, om 'main' er knyttet til en debugger, og automatisk vedhæfte den debugger til klientprocesserne ?


Bonus spørgsmål: Kan det gøres uden at ændre kildekoden/eksekverbarheder?


(Bemærk: Jeg er på Windows, ved hjælp af VS2010. Men enhver (anstændig) debugger ville gøre)

Bedste reference


Du kan bruge IsDebuggerPresent () for at vide, om main () bliver debugged.


Men du kan ikke omdirigere VS-debuggeren til at un-attach og re-attach til den igangværende proces fra en fejlfindet proces.


Det bedste jeg kan forestille mig, er at gyde en ny forekomst af vs at forsøge at vedhæfte det til klientprocessen. Det ville nok være nemmere at spawn windbg og have det knyttet til ClientProcess siden den kommandolinske støtte til pid osv. Er der.


Dette ville naturligvis heller ikke fungere, hvis appen fjernes fejlagtigt (CheckRemoteDebuggerPresent () returnerer sande), da du skal starte og vedhæfte fra fjernsystemet. For mange problemer er der ...