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
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to