Avatar billede waldeinburg Nybegynder
20. september 2001 - 14:12 Der er 14 kommentarer og
1 løsning

Debugger-programmering

Jeg er i gang med at skrive en lille debugger.
Den fungerer på følgende måde:
først kalder jeg CreateProcess, for at starte programmet, der skal debugges.
Så sætter jeg et loop i gang, hvor jeg bruger WaitForDebugEvent til at opsnappe debugevents.
En af de første events der kommer, er en exception \"Et eller flere argumenter er ugyldig(e)\" (kode 0x80000003). Den kommer inden programmet, der skal debugges, er overhovedet er startet (testet ved at komme med en messagebox i første linje af programmet). Jeg har prøvet at kalde WaitForSingleObject inden jeg starter loopet. Det skulle sikre, at den nye childprocess er startet inden jeg gør noget. Men så kommer programmet ikke længere end til task-manager.
Hvad kan det være, jeg gør galt?
Avatar billede waldeinburg Nybegynder
20. september 2001 - 14:15 #1
Måske skulle jeg lige give en slat kode:
    STARTUPINFO sInf;
    ::ZeroMemory (& sInf, sizeof (sInf));
    sInf.cb = sizeof (sInf);
    PROCESS_INFORMATION pInf;

    ::CreateProcess (
      NULL,
      \"test.exe\",
      NULL,
      NULL,
      FALSE,
      DEBUG_PROCESS,
      NULL,
      NULL,
      & sInf,
      & pInf);
Avatar billede jpk Nybegynder
20. september 2001 - 14:17 #2
Får denne exception programmet til at gå ned?
Avatar billede waldeinburg Nybegynder
20. september 2001 - 19:08 #3
Næ, der er ingen problemer, når jeg ignorerer det og bare kalder ContinueDebugEvent med parametret DBG_CONTINUE i stedet for DBG_EXCEPTION_NOT_HANDLED. På den anden side hører fejlen til i den høje ende, for den kommer selvom jeg kalder SetDebugErrorLevel med SLE_ERROR, så kun rigtige fejl slipper igennem (man kan også sætte den til SLE_MINORERROR eller SLE_WARNING).
Avatar billede jpk Nybegynder
21. september 2001 - 08:51 #4
WaitForSingleObject venter vel ti processen er færdig...
Hvad bruger du som time-out værdi i WaitForDebugEvent?
Avatar billede waldeinburg Nybegynder
21. september 2001 - 10:13 #5
jeg bruger INFINITE.
Jeg prøvede WaitForSingleObject fordi den blev brugt i et eksempel i Win32 API dokumentationen. Der stod \"Wait until child process exits.\" ovenover.
Avatar billede jpk Nybegynder
21. september 2001 - 11:09 #6
Ergo virker WaitForSingleObject ikke...
Avatar billede waldeinburg Nybegynder
21. september 2001 - 12:25 #7
Nej :), men jeg bruger den heller ikke. Det var bare et lille kikset forsøg på at få den der exception væk.
Avatar billede waldeinburg Nybegynder
21. september 2001 - 12:29 #8
Jeg har prøvet at kalde CreateProcess uden DEBUG_PROCESS parametret (bare sat til 0) og så fjerne opsnapningsloopet. Hvis den samme exception blev kastet, skulle det gerne resultere i, at programmet ikke ville starte (fordi der ikke var nogen exceptionhandler til at fange den). Men nu kom den ikke. Det er altså noget med det der \"debugging-mode\".
Avatar billede jpk Nybegynder
21. september 2001 - 12:50 #9
Hvis du ikke har nogen handler til at fange en exception, propagerer den jo bare op igennem systemet, i et forsøg på at finde en der tager sig af den! Hvis det sker, går programmet ikke nødvendigvis ned!
Avatar billede jpk Nybegynder
21. september 2001 - 12:51 #10
Hvilket program er det du starter? Giver du det nogle argumenter med/skal det evt. have nogle?
Avatar billede waldeinburg Nybegynder
21. september 2001 - 20:32 #11
Programmet, jeg starter er bare et lille testprogram, der laver et vindue. Jeg har også prøvet med en masse andre programmer, og der sker det samme.
Ang. den næstsidste kommentar, så har jeg prøvet at kalde ContinueDebugEvent med DBG_EVENT_NOT_HANDLED, og så fik jeg den smidt tilbage i hovedet som en (såkaldt \"last chance notification\"), og når jeg så stadig bare sendte den videre uden at gøre noget, lukkede programmet.
Mit system har åbenbart ingen exception-handler, og da denne exception kommer inden den nye process er rigtig startet, bliver den heller ikke fanget af \"catch(...)\" inde i den.
Avatar billede waldeinburg Nybegynder
21. september 2001 - 20:32 #12
og nej, det lille testprogram tager ingen argumenter
Avatar billede waldeinburg Nybegynder
25. september 2001 - 20:41 #13
Har du givet op, jpk? :)
Avatar billede jpk Nybegynder
27. september 2001 - 08:18 #14
Hvis jeg får tid senere, kan jeg afprøve koden...
(du kan evt. sende din kode til jkristensen@mdsproteomics.com)
Avatar billede waldeinburg Nybegynder
27. april 2003 - 12:55 #15
Uh, den var gammel :P

Jeg droppede projektet kort tid efter, så vidt jeg husker, og i dag bruger jeg Linux og vil selvfølgelig bare sætte mig ind i gdb, hvis jeg får brug for en debugger.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester