Sounds good!

> On Sep 24, 2018, at 10:45 AM, Leonard Mosescu <mose...@google.com> wrote:
> 
> Thanks Greg, this is what I had in mind. 
> 
> I have some ideas which involve this kind of debugger console. We'll likely 
> start with a basic version built on top of evaluate `cmd and once we get 
> around to building a full console I'll ping you.
> 
> On Sat, Sep 22, 2018 at 8:50 AM, Greg Clayton <clayb...@gmail.com 
> <mailto:clayb...@gmail.com>> wrote:
> 
> 
>> On Sep 21, 2018, at 1:20 PM, Leonard Mosescu <mose...@google.com 
>> <mailto:mose...@google.com>> wrote:
>> 
>> Great. Do you think that having an abstracted stream I/O tunneled through 
>> DAP would lose anything compared to the direct file handle? I can see a few 
>> problems using a native platform file handle: 
>> 
>> 1. It's specific to the platform (with subtle differences between platforms)
>> 2. It assumes a local setup, where the consumer and DAP implementation are 
>> running on the same machine, likely in the context of the same user.
>> 
>> If DAP had some basic read/write stream packets you can easily build a 
>> flexible remote setup. What do you think?
> 
> Yeah, I forgot about remote. Maybe best to set it all up through DAP and just 
> tell the IDE that you have a command interpreter and maybe what its prompt 
> should be. 
> 
> The init packet would be sent:
> 
> {"command":"initialize","type":"request","seq":1, "arguments":{...}}
> 
> Then in the response we would say we have an interpreter:
> 
> {"command":"initialize","type":"response", 
> "request_seq":1,"seq":0,"success":true,"body":{
>     "supportsCommandInterpreter":true, 
>     "interpreterPrompt":"(lldb)"
>   }
> }
> 
> 
> Then the IDE would need to support output going into (STDIN) that would go to 
> the command interpreter somehow, and accept output coming from the command 
> interpreter via the "output" event by adding support for a new output type 
> "interpreter":
> 
> {"event":"output","seq":0,"type":"event", 
> "body":{"category":"interpreter","output":"output text here"}}
> 
> Then the IDE would only need either have another window for the interpreter, 
> or allow the standard debugger console to be switched over into interpreter 
> mode and show both outputs there.
> 
> 
>> 
>> On Fri, Sep 21, 2018 at 10:39 AM, Greg Clayton <clayb...@gmail.com 
>> <mailto:clayb...@gmail.com>> wrote:
>> 
>> 
>>> On Sep 21, 2018, at 10:31 AM, Leonard Mosescu <mose...@google.com 
>>> <mailto:mose...@google.com>> wrote:
>>> 
>>> The solution I would love to see is to have the initialize packet return 
>>> something via the DAP that says "I have a command line interpreter, please 
>>> send a packet with a file handle (slave path to slave side of pseudo 
>>> terminal maybe)". VS Code and Nuclide both emulated tty already, so we 
>>> could have a true command line that exposes the "(gdb)" prompt for GDB and 
>>> "(lldb)" for lldb and all the power that comes with it.  
>>> 
>>> I agree, that's the main reason I asked. Having a per-DAP convention seems 
>>> unfortunate. Also, with the current DAP messages it doesn't seem we can do 
>>> things like auto-complete or passing control characters to the debugger 
>>> first (ex Ctrl-C).
>>> 
>>> I like your idea to manage an extra file handle. What if DAP offered 
>>> "console stream" packets? Yet another option would be going around DAP 
>>> completely for the pseudo terminal functionality, although it would be nice 
>>> if everything can be built on top of DAP.
>> 
>> Yeah there are two solutions to get a command line:
>> 1 - have initialize packet return "I need a console named 'LLDB Commands'" 
>> and then have the IDE be able to switch from "Debugger Console" (which 
>> evaluates expressions over to "LLDB Commands" and it repurposes the existing 
>> debugger console to just send LLDB commands. The user would be able to 
>> switch between the two. 
>> 2 - Use a file handle to the terminals that are supported in the IDEs. The 
>> benefit here is the ability to due curses style output where you can control 
>> the cursor position and emit color control codes to colorize output.
>> 
>>> 
>>> Not urgent but perhaps we can use LLDB to design and prototype such a DAP 
>>> extension, then propose it to the vscode team? Is this something you'd be 
>>> interested in?
>> 
>> I would be yes. I would love the ability to due approach #2 by adding 
>> something to the reply to the initialize packet and if the IDE supports it, 
>> they will send down a file handle that could be used. Right now their TTY 
>> support seems to be centered around running a sub process only (like /bin/sh 
>> or other command line executable), not around, just give me a terminal and a 
>> file handle I can read and write to.
>> 
>> Greg Clayton
>> 
>>> 
>>> 
>>> On Fri, Sep 21, 2018 at 9:56 AM, Greg Clayton <clayb...@gmail.com 
>>> <mailto:clayb...@gmail.com>> wrote:
>>> 
>>> 
>>>> On Sep 20, 2018, at 3:05 PM, Leonard Mosescu <mose...@google.com 
>>>> <mailto:mose...@google.com>> wrote:
>>>> 
>>>> Hi Greg, looking at request_evaluate() I noticed that it will evaluate the 
>>>> string as a lldb command if prefixed by ` . 
>>>> 
>>>> This is a great feature (it allows building REPL consoles on top of DAP), 
>>>> but I'm curious how you picked up this convention? For example I believe 
>>>> that the gdb DAP uses -exec 'command' instead.
>>> 
>>> ` is an illegal expression character so it won't stop you from evaluating 
>>> any possible expression. The gdb prefix "-exec" stops you from being able 
>>> to negate a local variable named "exec". Not a huge deal.  So I just picked 
>>> a good prefix character that wouldn't stop anyone from evaluating any valid 
>>> expression (at least in C/C++/ObjC/Swift).
>>> 
>>> The solution I would love to see is to have the initialize packet return 
>>> something via the DAP that says "I have a command line interpreter, please 
>>> send a packet with a file handle (slave path to slave side of pseudo 
>>> terminal maybe)". VS Code and Nuclide both emulated tty already, so we 
>>> could have a true command line that exposes the "(gdb)" prompt for GDB and 
>>> "(lldb)" for lldb and all the power that comes with it. 
>>> 
>>> I needed something that could run LLDB commands when things go wrong to do 
>>> trouble shooting (enable logging, run commands to dump vital information) 
>>> so I hacked it in with `
>>> 
>>> Greg
>>> 
>>>> 
>>>> On Thu, Aug 16, 2018 at 11:01 AM, Phabricator via Phabricator 
>>>> <revi...@reviews.llvm.org <mailto:revi...@reviews.llvm.org>> wrote:
>>>> This revision was automatically updated to reflect the committed changes.
>>>> Closed by commit rL339911: Add a new tool named &quot;lldb-vscode&quot; 
>>>> that implements the Visual Studio Code Debug… (authored by gclayton, 
>>>> committed by ).
>>>> Herald added a subscriber: llvm-commits.
>>>> 
>>>> Changed prior to commit:
>>>>   https://reviews.llvm.org/D50365?vs=161058&id=161067#toc 
>>>> <https://reviews.llvm.org/D50365?vs=161058&id=161067#toc>
>>>> 
>>>> Repository:
>>>>   rL LLVM
>>>> 
>>>> https://reviews.llvm.org/D50365 <https://reviews.llvm.org/D50365>
>>>> 
>>>> Files:
>>>>   lldb/trunk/lldb.xcodeproj/project.pbxproj
>>>>   lldb/trunk/packages/Python/lldbsuite/test/dotest.py
>>>>   lldb/trunk/packages/Python/lldbsuite/test/lldbtest.py
>>>>   lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/.categories
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/attach/Makefile
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/attach/TestVSCode_attach.py
>>>>   lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/attach/main.c
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/breakpoint/Makefile
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/breakpoint/TestVSCode_setBreakpoints.py
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/breakpoint/TestVSCode_setExceptionBreakpoints.py
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/breakpoint/TestVSCode_setFunctionBreakpoints.py
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/breakpoint/main.cpp
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/launch/Makefile
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/launch/TestVSCode_launch.py
>>>>   lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/launch/main.c
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/lldbvscode_testcase.py
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/stackTrace/Makefile
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/stackTrace/TestVSCode_stackTrace.py
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/stackTrace/main.c
>>>>   lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/step/Makefile
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/step/TestVSCode_step.py
>>>>   lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/step/main.cpp
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/variables/Makefile
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/variables/TestVSCode_variables.py
>>>>   
>>>> lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/variables/main.cpp
>>>>   lldb/trunk/packages/Python/lldbsuite/test/tools/lldb-vscode/vscode.py
>>>>   lldb/trunk/tools/CMakeLists.txt
>>>>   lldb/trunk/tools/lldb-vscode/BreakpointBase.cpp
>>>>   lldb/trunk/tools/lldb-vscode/BreakpointBase.h
>>>>   lldb/trunk/tools/lldb-vscode/CMakeLists.txt
>>>>   lldb/trunk/tools/lldb-vscode/ExceptionBreakpoint.cpp
>>>>   lldb/trunk/tools/lldb-vscode/ExceptionBreakpoint.h
>>>>   lldb/trunk/tools/lldb-vscode/FunctionBreakpoint.cpp
>>>>   lldb/trunk/tools/lldb-vscode/FunctionBreakpoint.h
>>>>   lldb/trunk/tools/lldb-vscode/JSONUtils.cpp
>>>>   lldb/trunk/tools/lldb-vscode/JSONUtils.h
>>>>   lldb/trunk/tools/lldb-vscode/LLDBUtils.cpp
>>>>   lldb/trunk/tools/lldb-vscode/LLDBUtils.h
>>>>   lldb/trunk/tools/lldb-vscode/README.md
>>>>   lldb/trunk/tools/lldb-vscode/SourceBreakpoint.cpp
>>>>   lldb/trunk/tools/lldb-vscode/SourceBreakpoint.h
>>>>   lldb/trunk/tools/lldb-vscode/SourceReference.h
>>>>   lldb/trunk/tools/lldb-vscode/VSCode.cpp
>>>>   lldb/trunk/tools/lldb-vscode/VSCode.h
>>>>   lldb/trunk/tools/lldb-vscode/VSCodeForward.h
>>>>   lldb/trunk/tools/lldb-vscode/lldb-vscode-Info.plist
>>>>   lldb/trunk/tools/lldb-vscode/lldb-vscode.cpp
>>>>   lldb/trunk/tools/lldb-vscode/package.json
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to