windows - Sådan vedhæftes en allerede igangværende proces noninvasively

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en proces suspenderet til breakpoint under visuel studio debugger.
Jeg kan vedhæfte så mange som cdb (Microsoft's konsol debugger) i ikke-invasiv tilstand som


cdb -p pid -pvr


Hvordan opnås det samme ved hjælp af mit eget program, der bruger Debug Engine API.


 IDebugClient* debugClient = 0;
(DebugCreate( \_\_uuidof(IDebugClient), (void **)&debugClient );
 debugClient->AttachProcess(0,id,DEBUG\_ATTACH\_NONINVASIVE
                |DEBUG\_ATTACH\_NONINVASIVE\_NO\_SUSPEND);


Denne kode forårsager E\_INVALIDARG. Er denne kombination ikke tilladt? Den nedenfor fungerer, men når den kalder GetStackTrace, vender den tilbage E\_UNEXPECTED.


debugClient->AttachProcess(0,id,DEBUG\_ATTACH\_NONINVASIVE);
debugControl->GetStackTrace(0, 0, 0, pStackFrames, maxFrames, &framesFilled);


Jeg er interesseret i at vedhæfte en proces, der allerede findes på debug break noninvasive måde, og få et par lokale variable fra den nuværende stak & en vis global variabel værdi.


For det andet kan nogen henvise mig til den funktion, der bruges til at dumpe indholdet af hukommelse til et symbol iterativt som! Stl gør. Jeg skal skrive et plugin til at dumpe en af ​​min vektorlignende struktur.


Tak

Bedste reference


Jeg tror, ​​at der ikke er noget galt med


DEBUG\_ATTACH\_NONINVASIVE|DEBUG\_ATTACH\_NONINVASIVE\_NO\_SUSPEND 


kombination - det er helt tilladt og er endda fremhævet i assertprøve.
Ellers, hvad angår dokumentation, er det ikke så detaljeret. Jeg foreslår at debugging din udvidelse ved hjælp af wt (spor og se data) - det er særligt nyttigt, når du skal finde den nøjagtige delrutine, der returnerer en fejl, der kan give dig bedre indsigt i problemet.
Hvad angår fjernadgang til indtastede data i dine apps fra en udvidelse, har jeg fundet ExtRemoteTyped-klassen (tilgængelig i engextcpp.hpp i sdk-undermappen) for at være meget nyttigt og intuitivt at bruge.