c ++ - Debugger hovedløkke

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at gennemføre i c ++/Windows 'Debugger Main Loop' beskrevet i denne artikel: Skrivning af Debugger's Main Loop [10]


Men jeg vil have nogen kastet undtagelse for at vise en fejlmeddelelse til secreen og blive fanget af debuggeren.
Jeg forstod, at jeg kan gøre dette ved at give ContinueDebugEvent en vis værdi af DBG \_ ??? men jeg ved ikke hvad det er.

Hvad er denne værdi?


Jeg har også bemærket, at konsolprogrammer giver besked om undtagelser, når der er skrevet noget til konsollen.
Hvordan kan jeg filtrere den faktiske undtagelse fra disse ting? Har det noget at gøre med 'første chance' -værdien?

tak :)

Bedste reference


Fejlfinderen modtager en undtagelsesbegivenhed for hver undtagelse, der opstår i debuggee.
Hvis du sender DBG\_CONTINUE til ContinueDebugEvent, slår debuggeren undtagelsen, og udførelsen fortsætter som om der ikke opstod nogen undtagelse i første omgang. Det betyder, at debuggee heller ikke er underrettet om det.
Hvis du på den anden side passerer DBG\_EXCEPTION\_NOT\_HANDLED, bliver debuggen meddelt og ansvarlig for håndteringen af ​​undtagelsen.


Nu, hvis debuggeen ikke håndterer (læs: fangst) undtagelsen, bliver debuggeren meddelt en anden gang, denne gang med Event.u.Exception.dwFirstChance indstillet til 0. På dette tidspunkt ville undtagelsen opsige processen, hvis du passerer DBG\_EXCEPTION\_NOT\_HANDLED.


To ting at huske på:



  • Den normale måde at kommunikere en streng på debuggeren på er OutputDebugString. Du behøver ikke bruge selvdefinerede undtagelser, medmindre du skal overføre noget andet end en streng.

  • Hvis du planlægger at smide din egen undtagelse for at formidle bestemte begivenheder til debuggeren, skal du tjekke Event.u.Exception.ExceptionRecord.ExceptionCode og se om den passer til din foruddefinerede undtagelsestype og brug DBG\_CONTINUE i så fald.