Basic expressions in GDB
user1234
user1234 at 12.de
Wed Sep 4 16:56:20 UTC 2024
On Thursday, 1 August 2024 at 03:24:30 UTC, Valentino Giudice
wrote:
> Hi all.
> I am a newbie and this is my first time posting on a D forum.
>
> I am using GDB on Linux, from Windows, trough WSL.
> I am compiling using DMD (in debug mode), as this seems to give
> better results than using GDC.
>
> So far, I have failed to do the following:
>
> - Create, from the debugger, a string. A sequence of characters
> between quote is evaluated as a C-style array of chars.
> - Call a function from the debugger with its name. Only
> unintuitive mangled names can be used and the output has to be
> cast in the proper type.
>
> If I compile using GDC or LDC, then global variables inside a
> module will have two names: "module.variable" and a mangled
> name.
> They have to be cast when read and the "module.variable" name
> needs to be accessed using single quotes around it, or it
> crashes.
>
> When compiling with DMD this doesn't happen: global variables
> only have the "module.variable" name, which can be read without
> any cast and with or without single quotes.
>
> What should I consider when writing expressions in the debugger?
> Is there any way to write expression closer to the D syntax?
>
> Thank you all in advance.
AFAIK with LDC (so debug info are generated with LLVM) there's no
way to evaluate globals using expressions. The names somewhat
look like expressions but it's actually just a full name, hence
the need to had quotes, whereas for non-static member, it's
really an expression.
I have the same problem with static members ([0], onhe has to use
"s.a" to see the value of the static member).
Note that the LLVM API used to generate DWARF info is not even
official (it's still at the "metadata" stage).
"Not a so usefull answer" you might think. Well it's because
initially I wanted to share that old blog post [1]. Essentially
it's about linking your program with `extern(C)` functions, which
allows better pretty printing (as you can call the function with
a plain name since `extern(C)` stuff are not mangled).
[0]: https://github.com/ldc-developers/ldc/issues/4567
[1]:
https://medium.com/dunnhumby-data-science-engineering/how-to-simplify-debugging-unit-tests-in-d-a2b52c5c1fa
More information about the Digitalmars-d-debugger
mailing list