digitalmars.D.learn - Using Windbg to debug D applications and unittests
- solidstate1991 (13/13) Feb 25 2023 I had a lot of trouble trying to get Visual Studio to catch
- evilrat (10/12) Feb 25 2023 VisualD for Visual Studio provides some extra help with
- solidstate1991 (5/13) Feb 25 2023 I used to use Visual Studio, but I forgot how to set it up
- evilrat (7/11) Feb 25 2023 Turn on exception settings panel in top menu bar:
- solidstate1991 (5/10) Feb 25 2023 Well, VS turned to be even less cooperative than before. Now it
- evilrat (11/15) Feb 25 2023 Nothing happens without a reason, check your project settings and
- solidstate1991 (4/13) Feb 25 2023 Well, it was that.
- Basile B. (13/19) Feb 27 2023 You must break on `_d_throwc` (windows), `_d_throwdwarf` (linux),
- Chris Piker (4/7) Mar 04 2023 Glad you mentioned Dexed. I Had been meaning to try it out but
- Basile B. (4/12) Mar 05 2023 The GDB widget wont work on windows I think. The point of my
I had a lot of trouble trying to get Visual Studio to catch handled exceptions, which would have been mandatory for debugging unittests, but I either forgot how to do it, or something have changed in either the newer versions of VS or the D compilers I use (LDC, DMD). So I downloaded the new WinDbg Preview, which is like the older WinDbg but with some new features and a new GUI. This would also allow me (in theory) to get rid of VS in the future or only keep it for other projects. So far I struggle to set up breakpoints that actually work and doesn't just step over them. It also doesn't like templates, especially if there's multiple instances of them. (Also I couldn't find any way to break on exceptions so far.)
Feb 25 2023
On Saturday, 25 February 2023 at 15:55:33 UTC, solidstate1991 wrote:I had a lot of trouble trying to get Visual Studio to catch handled exceptionsVisualD for Visual Studio provides some extra help with displaying your data in debugger and on Windows is the best you can get for D. You can use Visual Studio Code + code-d to debug, but it is not as good as full Visual Studio counterpart. Anyway you can use LDC with -gc flag to improve this situation a bit as it will mimic C++ debug info that is more compatible with said debuggers than D one.
Feb 25 2023
On Saturday, 25 February 2023 at 16:22:49 UTC, evilrat wrote:VisualD for Visual Studio provides some extra help with displaying your data in debugger and on Windows is the best you can get for D. You can use Visual Studio Code + code-d to debug, but it is not as good as full Visual Studio counterpart. Anyway you can use LDC with -gc flag to improve this situation a bit as it will mimic C++ debug info that is more compatible with said debuggers than D one.I used to use Visual Studio, but I forgot how to set it up properly to break on handled throws. Now it doesn't do anything if throws are handled in any fashion, and I can't find an option to change it (it was removed maybe?).
Feb 25 2023
On Saturday, 25 February 2023 at 16:58:44 UTC, solidstate1991 wrote:I used to use Visual Studio, but I forgot how to set it up properly to break on handled throws. Now it doesn't do anything if throws are handled in any fashion, and I can't find an option to change it (it was removed maybe?).Turn on exception settings panel in top menu bar: Debug->Windows->Exceptions Settings (Crtl+Alt+E) My settings for D is full "D exceptions", under Win32 check "D Exception", or just click "Restore to default settings" in there on top of that panel.
Feb 25 2023
On Saturday, 25 February 2023 at 18:08:57 UTC, evilrat wrote:Turn on exception settings panel in top menu bar: Debug->Windows->Exceptions Settings (Crtl+Alt+E) My settings for D is full "D exceptions", under Win32 check "D Exception", or just click "Restore to default settings" in there on top of that panel.Well, VS turned to be even less cooperative than before. Now it only loads and runs a specific old version of an EXE file. I'm asking around for other debuggers, I'm definitely moving to another.
Feb 25 2023
On Saturday, 25 February 2023 at 19:31:10 UTC, solidstate1991 wrote:Well, VS turned to be even less cooperative than before. Now it only loads and runs a specific old version of an EXE file. I'm asking around for other debuggers, I'm definitely moving to another.Nothing happens without a reason, check your project settings and make sure that for debugging you have correct paths, command, and arguments. Even with no debug info and no project you can just drop an executable to an empty VS window and start debugging it, at the very least it can show disassembly. If there is .pdb files with debug info next to your executable you can just drag and drop your D source files and then add breakpoints in that source files and it will work.
Feb 25 2023
On Saturday, 25 February 2023 at 19:55:27 UTC, evilrat wrote:Nothing happens without a reason, check your project settings and make sure that for debugging you have correct paths, command, and arguments. Even with no debug info and no project you can just drop an executable to an empty VS window and start debugging it, at the very least it can show disassembly. If there is .pdb files with debug info next to your executable you can just drag and drop your D source files and then add breakpoints in that source files and it will work.Well, it was that. I'll try to get GDB running, since I got so fed up with MS's own debuggers.
Feb 25 2023
On Saturday, 25 February 2023 at 15:55:33 UTC, solidstate1991 wrote:I had a lot of trouble trying to get Visual Studio to catch handled exceptions, which would have been mandatory for debugging unittests, but I either forgot how to do it, or something have changed in either the newer versions of VS or the D compilers I use (LDC, DMD). [...]You must break on `_d_throwc` (windows), `_d_throwdwarf` (linux), `_d_throw_exception` (ldc). They are defined in - https://github.com/dlang/dmd/blob/master/druntime/src/rt/deh.d - https://github.com/dlang/dmd/blob/master/druntime/src/rt/deh_win32.d - https://github.com/dlang/dmd/blob/master/druntime/src/rt/deh_win64_posix.d At least this is what is done for the Dexed GDB widget, so that gdb breaks automatically when an Error or an Exception is new'd (https://gitlab.com/basile.b/dexed/-/blob/master/src/u_gdb.pas#L2072).
Feb 27 2023
On Monday, 27 February 2023 at 12:09:50 UTC, Basile B. wrote:At least this is what is done for the Dexed GDB widget, so that gdb breaks automatically when an Error or an Exception is new'd (https://gitlab.com/basile.b/dexed/-/blob/master/src/u_gdb.pas#L2072).Glad you mentioned Dexed. I Had been meaning to try it out but forgot about it. I just downloaded the deb and will give it a go. Thanks!
Mar 04 2023
On Saturday, 4 March 2023 at 19:19:26 UTC, Chris Piker wrote:On Monday, 27 February 2023 at 12:09:50 UTC, Basile B. wrote:The GDB widget wont work on windows I think. The point of my first answer was just to show you how to automatically break when something is thrown.At least this is what is done for the Dexed GDB widget, so that gdb breaks automatically when an Error or an Exception is new'd (https://gitlab.com/basile.b/dexed/-/blob/master/src/u_gdb.pas#L2072).Glad you mentioned Dexed. I Had been meaning to try it out but forgot about it. I just downloaded the deb and will give it a go. Thanks!
Mar 05 2023