On 27/11/2019 08:47, Raphael “Teemperor” Isemann via lldb-dev wrote:
This can also be reproduced in the command line like this:
(lldb) expr "foo"
(const char [4]) $0 = "foo"
(lldb) expr "bar"
(const char [4]) $1 = "bar"
(lldb) expr $0
(const char [4]) $0 = “bar”
This however works just fine:
(lldb) expr char c[] = "foo"; c
(char [4]) $0 = "foo"
(lldb) expr char c[] = "bar"; c
(char [4]) $1 = "bar"
(lldb) expr $0
(char [4]) $0 = “foo”
I don’t know the related code so well, but from what I remember we have
a storage mechanism for persistent variables that we fill up (in
the ‘Materializer’ IIRC). We probably just copy the pointer itself to
this storage but not the memory it points to. I guess we could tweak
that logic to detect pointers that point into memory LLDB allocated and
then either extract the necessary memory into our storage or keep the
related sections around.
Anyway, I filed https://bugs.llvm.org/show_bug.cgi?id=44155 and I will
ask around what solution people would prefer once thanksgiving is over.
You can find a kind of a description of how this is meant to work in
<http://lists.llvm.org/pipermail/lldb-dev/2019-October/015703.html>.
Persisting string literals that were typed into the expression seems
reasonable and hopefully not too difficult, and it would kind of match
what happens during "normal" compilation. Doing that for random "const
char *"s that you happen to stumble upon in the result variable seems
more problematic, and I'm not sure we should even try...
pl
_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev