20. september 2001 - 14:12Der 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?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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).
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.
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\".
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!
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.
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.
Synes godt om
Ny brugerNybegynder
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.