cmtice wrote:
> I wrote a fairly long comment on Friday, but I don't see it anymore so, it
> looks like github has swallowed it. Here's my reconstruction of it:
>
> LLDB commands have the notion of a "repeat command", which can sometimes be
> more complicated than just running the same string over and over again. This
> can be e.g. seen with the `memory read` command, which doesn't just print the
> same memory again -- it actually prints the memory that comes _after_ it (a
> pretty nifty feature actually):
>
> ```
> (lldb) memory read argv
> 0x7fffffffd8a8: 49 dc ff ff ff 7f 00 00 00 00 00 00 00 00 00 00
> I...............
> 0x7fffffffd8b8: 6c dc ff ff ff 7f 00 00 ae dc ff ff ff 7f 00 00
> l...............
> (lldb)
> 0x7fffffffd8c8: c4 dc ff ff ff 7f 00 00 cf dc ff ff ff 7f 00 00
> ................
> 0x7fffffffd8d8: 09 dd ff ff ff 7f 00 00 18 dd ff ff ff 7f 00 00
> ................
> (lldb)
> 0x7fffffffd8e8: 40 dd ff ff ff 7f 00 00 7d dd ff ff ff 7f 00 00
> @.......}.......
> 0x7fffffffd8f8: 81 e5 ff ff ff 7f 00 00 9d e5 ff ff ff 7f 00 00
> ................
> (lldb) memory read argv
> 0x7fffffffd8a8: 49 dc ff ff ff 7f 00 00 00 00 00 00 00 00 00 00
> I...............
> 0x7fffffffd8b8: 6c dc ff ff ff 7f 00 00 ae dc ff ff ff 7f 00 00
> l...............
> ```
>
> Storing (and repeating) the command string in lldb-dap would break this
> behavior. What we'd ideally want is to actually take the empty string and
> pass it to lldb's command interpreter so that the proper repeat logic kicks
> in.
>
> The thing which makes this tricky (but not too complicated I think) is that
> lldb-dap multiplexes expression commands and CLI commands into the same
> string (the `DetectExpressionContext` does the demultiplexing).
>
> I think the proper repeat handling could be two things about each command:
>
> * the type ("expression context") of the command
> * the command string itself, if the command was not a CLI command (so we can
> repeat the expression)
>
> Then, when we get an empty string, we check the type of the previous command:
>
> * if it was a CLI command (`ExpressionContext::Command`), we change send the
> empty string to lldb command interpreter, so that it does the right thing
> * otherwise, we take the expression string and re-evaluate it (like you do
> here).
I think I have done what you requested now.
https://github.com/llvm/llvm-project/pull/107485
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits