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