digitalmars.D.debugger - -checkaction=C - Debugger out of sync?
- frame (23/23) Jan 25 2022 In Visual Studio I can step into a thread and hold on a while. By
- frame (6/17) Jan 27 2022 No, I don't.
- frame (2/3) Jan 27 2022 Forgot to say thank you =)
- Rainer Schuetze (8/24) Jan 27 2022 Sorry, I still screw this up too often since the default/button order
In Visual Studio I can step into a thread and hold on a while. By resuming the next instruction some invariant kicks in and throws an error but it doesn't hold the thread in the debugger - I just see the error on the output. The debugger is still active but now running from `rt.lifetime.finalize_struct(...)` (at least this is shown in the stack window) while executing the next step of my user code in a already half destroyed struct. Setting a breakpoint on the invariant assert does not work. In detail it's some Schrödingers assert: If I set a breakpoint without holding the thread on, nothing happens and all variants are fine. If I hold the thread on with the breakpoint set and then resume with the next step, also no error appears. But if I do the same with disabled breakpoint, the error is thrown in the output. It's the same thread, I checked it with GetCurrentThreadId(). Also the invariant is in the same thread checked, so the debugger is somehow out of sync while the program flow is ahead. Then I checked that I have supplied `-checkaction=C` on the main app while a DLL was compiled with default settings. After changing the DLL, the error disappeared. Is this just a coincidence or can `-checkaction` cause a stack corruption or something?
Jan 25 2022
Rainer Schuetze I quote this (you have sent me somehow a private email)If your invariant is called from the GC during finalization, it might have to do with the debugger executing code to show structs or ranges. Are you using the visualizer methods __debugOverView, __debugExpanded, etc.? Are ranges displayed in your Auto/Local/Watch windows?No, I don't.You can try to disable implicit code execution by the debugger in Tools->Options->Debugging->Mago by unchecking options "Call struct/class..." and "Call range methods".Yes, the option `Call range methods` causes the problem! Is that still experimental in VisualD 1.2.0? Please do not enable it by default then.
Jan 27 2022
On Thursday, 27 January 2022 at 17:32:03 UTC, frame wrote:Rainer SchuetzeForgot to say thank you =)
Jan 27 2022
On 27/01/2022 18:32, frame wrote:Rainer Schuetze I quote this (you have sent me somehow a private email)Sorry, I still screw this up too often since the default/button order has changed in Thunderbird.It's a bit dangerous because executing code automatically can mutate your program state. The default has been changed quite some time ago (https://github.com/rainers/mago/commit/8ce1bb37818ea38e88ec8e f2439383b592fca46), so you probably picked up the enabled state as an early adopter.If your invariant is called from the GC during finalization, it might have to do with the debugger executing code to show structs or ranges. Are you using the visualizer methods __debugOverView, __debugExpanded, etc.? Are ranges displayed in your Auto/Local/Watch windows?No, I don't.You can try to disable implicit code execution by the debugger in Tools->Options->Debugging->Mago by unchecking options "Call struct/class..." and "Call range methods".Yes, the option `Call range methods` causes the problem! Is that still experimental in VisualD 1.2.0? Please do not enable it by default then.
Jan 27 2022