> On Apr 24, 2018, at 5:24 PM, Александр Поляков <polyakov....@gmail.com> wrote:
> 
> Thanks Jim, it helped me a lot.
> 
> Can we do something like this: 
>    1) having empty dummy target;

Yes, you don't need to do anything here.  The Debugger object always makes a 
dummy target.

>    2) setting breakpoints to this dummy target until getting real file 
> through -file-exec-and-symbols;

Right, the Debugger has an API: GetDummyTarget that will get this for you, and 
then you call GetDummyTarget().BreakpointCreate...

>    3) creating new target and moving all breakpoints from dummy target to it;

The move will happen automatically.

>    4) clearing all breakpoints from the dummy target;

This seems reasonable.  Note however that you might inherit some breakpoints 
without seeing MI commands to do so - for instance from the user's .lldbinit 
file - and you probably want to propagate them every time you get a new 
-file-exec-and-symbols.  So you should keep track of the breakpoints that were 
in the dummy target when you got started, and only delete the ones you made 
after that.

>    5) back to 1);
> 

Jim

> 
> 
> 
> 
> 
> Regards,
> Alexander Polyakov
> 
> 2018-04-25 2:56 GMT+03:00 Jim Ingham <jing...@apple.com>:
> In lldb, one Debugger can debug multiple different processes at a time.  This 
> is one of the ways lldb differs from gdb (*)...  In lldb, the Target is the 
> entity that represents a thing that you could debug.  A Target might or might 
> not actually be debugging anything.  If it is, the Target will have a 
> Process.  You generally make a target by giving it a file and maybe an 
> architecture.  Note the "file" command in lldb is just an alias for "target 
> create".  It makes a target out of a file.  Then when you want to debug that 
> file, you would say Target::Launch.
> 
> But a Target need not have a file.  For instance, if you do:
> 
> $ lldb --pid 12345
> 
> lldb has to make an empty target, attach it to the process with pid 12345, 
> and only then will it actually know what the file is.
> 
> Note also, in both lldb and gdb, you can set breakpoints in the 
> .lldbinit/.gdbinit file.  But both these init files get read in BEFORE any of 
> the command line arguments (including the one with the file command) get 
> processed.
> 
> So there has to be a way to hold onto breakpoints before any target is 
> created.  This was simple in gdb since it only supports one target, so you 
> can just stuff the breakpoints into the global list of breakpoint you were 
> going to use.  But you can't do that in lldb, because we could have many 
> targets. That's what the lldb "dummy target" is for.  It holds onto 
> breakpoints that are made in the absence of any target, and then each time a 
> new target gets made, it gets seeded with breakpoints from the dummy target.
> 
> Greg was worried that you could do:
> 
> -break-set
> -file-exec-and-symbols
> 
> and he wanted to make sure that works.  I think that's what you understood as 
> well.  
> 
> Since the gdb-mi interface models the way gdb works, it really only supports 
> having one target.  So I was suggesting that the lldb-mi module keep track of 
> this one privileged Target, and to make sure that -break-set sets breakpoints 
> in the dummy target if that privileged Target is still empty.
> 
> Jim
> 
> (*) one lldb process can also support multiple Debuggers, but that's another 
> story...
> 
> Jim
> 
> 
> 
> > On Apr 24, 2018, at 4:41 PM, Александр Поляков <polyakov....@gmail.com> 
> > wrote:
> > 
> > I don't completely understand how it possible to add breakpoint before 
> > choosing a file(did you mean -file-exec-and-symbols cmd?).
> > And another important thing: could you explain me what is target in terms 
> > of lldb?
> > 
> > Thanks in advance.
> > 
> > Regards,
> > Alexander Polyakov
> > 
> > 2018-04-25 1:32 GMT+03:00 Ted Woodward <ted.woodw...@codeaurora.org>:
> > 
> > You'll still need HandleCommand for pass through commands. lldb commands 
> > send to lldb-mi are handled normally, so something like "file a.out" would 
> > set up a target using a.out. "-interpreter exec console <cmd>" does the 
> > same thing. Other than that, I'm all for cleaning up lldb-mi. There were 
> > some funky decisions made when it was first developed.
> > 
> > Ted
> > 
> > --
> > Qualcomm Innovation Center, Inc.
> > The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a 
> > Linux Foundation Collaborative Project
> > 
> > > -----Original Message-----
> > > From: lldb-dev [mailto:lldb-dev-boun...@lists.llvm.org] On Behalf Of Jim
> > > Ingham via lldb-dev
> > > Sent: Tuesday, April 24, 2018 5:19 PM
> > > To: Greg Clayton <clayb...@gmail.com>
> > > Cc: LLDB <lldb-dev@lists.llvm.org>
> > > Subject: Re: [lldb-dev] Welcome Alexander!
> > > 
> > > 
> > > 
> > > > On Apr 24, 2018, at 3:08 PM, Greg Clayton <clayb...@gmail.com> wrote:
> > > >
> > > >
> > > >
> > > >> On Apr 24, 2018, at 3:00 PM, Jim Ingham <jing...@apple.com> wrote:
> > > >>
> > > >>
> > > >>
> > > >>> On Apr 24, 2018, at 2:46 PM, Greg Clayton <clayb...@gmail.com> wrote:
> > > >>>
> > > >>>
> > > >>>
> > > >>>> On Apr 24, 2018, at 2:35 PM, Jim Ingham <jing...@apple.com> wrote:
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>> On Apr 24, 2018, at 9:44 AM, Greg Clayton <clayb...@gmail.com>
> > > wrote:
> > > >>>>>
> > > >>>>>
> > > >>>>>
> > > >>>>>> On Apr 24, 2018, at 9:37 AM, Jim Ingham <jing...@apple.com>
> > > wrote:
> > > >>>>>>
> > > >>>>>>>
> > > >>>>>>> On Apr 24, 2018, at 7:43 AM, Greg Clayton via lldb-dev <lldb-
> > > d...@lists.llvm.org> wrote:
> > > >>>>>>>
> > > >>>>>>> Welcome Alexander!
> > > >>>>>>
> > > >>>>>> Yes, welcome!
> > > >>>>>>
> > > >>>>>>>
> > > >>>>>>> The title might be more stated as "Reimplement lldb-mi to 
> > > >>>>>>> correctly
> > > use the SB API instead of using HandleCommand and regular expressions to
> > > parse the command results" as it is already using the SB API, just not 
> > > using it
> > > anywhere close to correctly!
> > > >>>>>>>
> > > >>>>>>> I look forward to seeing the changes.
> > > >>>>>>>
> > > >>>>>>> A few things I ran into when playing with lldb-mi:
> > > >>>>>>> - file-exec or exec-file packet might come _after_ some 
> > > >>>>>>> breakpoints
> > > are set. We should make sure we create a lldb::SBTarget right away and 
> > > set the
> > > breakpoints on the empty target so that we don't miss these breakpoints 
> > > if this
> > > is still an issue. Then the when we receive the exec-file packet, we set 
> > > the file
> > > on the target
> > > >>>>>>
> > > >>>>>> Breakpoints set before any target is created are set on the dummy
> > > target.  Breakpoints on the dummy target are copied into any new targets. 
> > >  So
> > > this should not be necessary.  If that wasn't working we should figure 
> > > that out,
> > > but it's not the responsibility of the MI to get this right.
> > > >>>>>
> > > >>>>> We are trying not to use the command line and the command line is
> > > what uses the dummy target automatically. When using the SB API you use a
> > > lldb::SBTarget to set the breakpoint on so you need a target. What do you
> > > suggest we use for the target? I would rather the lldb-mi code not rely 
> > > on the
> > > currently selected target or the dummy target.
> > > >>>>
> > > >>>> lldb-MI models gdb's behavior, which is one debugger with one target.
> > > There is no command to add or switch to targets, etc.  So it doesn't seem
> > > unreasonable for MI to keep track of its one actual target and if that is 
> > > empty,
> > > use SBDebugger::GetDummyTarget.  The other option is to make a blank 
> > > target
> > > up front and then add files to it when you see the -file-exec command. 
> > > But that
> > > seems more error-prone than using the mechanism lldb provides for doing
> > > things before you have a target.  Again, if we were modeling an API that 
> > > could
> > > switch targets we might want to do something more clever.  But that isn't 
> > > how
> > > the GDB-MI was set up to work.
> > > >>>>
> > > >>>
> > > >>> lldb-mi code may or may not have a target when it needs one. If it 
> > > >>> doesn't
> > > have a target, use the SB API to get the dummy target and use that.
> > > >>>
> > > >>> Jim: is the dummy target good for anything other than adding 
> > > >>> breakpoints
> > > to? What all gets copied from a the dummy target to the new target when 
> > > one
> > > gets created?
> > > >>
> > > >> At present it only does breakpoints and stop hooks (see
> > > Target::PrimeFromDummyTarget.)  I didn't do watchpoints since those are
> > > seldom things you want to set generically, but you could probably add 
> > > that.
> > > Was there anything else you were thinking of?
> > > >>
> > > >
> > > > No, just mostly trying to let Alexander know what he should use the 
> > > > Dummy
> > > target for and also for my own knowledge. If there are MI clients that do 
> > > other
> > > things, we will need to know if we need to create an empty real target if 
> > > they
> > > aren't breakpoints or stop hooks.
> > > 
> > > I can't think of any other things you add to a target like this.  The 
> > > settings get
> > > inherited, and once you've started adding modules, I think you should 
> > > create a
> > > new target to hold them.  But for anything interesting that's missing, as 
> > > long as
> > > they are copiable it would be easy to add them.  Just call
> > > GetSelectedOrDummyTarget when you go to set them, and then put the copy in
> > > PrimeFromDummyTarget.
> > > 
> > > >
> > > > Greg
> > > >
> > > >> Jim
> > > >>
> > > >>>
> > > >>> Alexander, feel free to ask questions if you didn't understand any of 
> > > >>> the
> > > above information.
> > > >>>
> > > >>>
> > > >>>
> > > >>>> Jim
> > > >>>>
> > > >>>>
> > > >>>>>
> > > >>>>>>
> > > >>>>>>> - remove all uses of HandleCommand and use SB APIs where possible
> > > >>>>>>> - Add any SB API that might be missing and require us to use
> > > HandleCommand
> > > >>>>>>>
> > > >>>>>>
> > > >>>>>> The rest of these seem good guidelines.
> > > >>>>>>
> > > >>>>>> Jim
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>> Good luck and let us know if you have any questions,
> > > >>>>>>>
> > > >>>>>>> Greg Clayton
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>> On Apr 23, 2018, at 3:19 PM, Adrian Prantl via lldb-dev <lldb-
> > > d...@lists.llvm.org> wrote:
> > > >>>>>>>>
> > > >>>>>>>> Please join me in welcoming Alexander Polyakov, who will be
> > > working on cleaning up and completing LLDB's lldb-mi fronted as part of 
> > > his
> > > Google Summer Of Code project:
> > > >>>>>>>>
> > > >>>>>>>> Reimplement lldb-mi on top of the LLDB public SB API
> > > >>>>>>>>
> > > https://summerofcode.withgoogle.com/projects/#5427847301169152
> > > >>>>>>>>
> > > >>>>>>>> -- adrian
> > > >>>>>>>> _______________________________________________
> > > >>>>>>>> lldb-dev mailing list
> > > >>>>>>>> lldb-dev@lists.llvm.org
> > > >>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> > > >>>>>>>
> > > >>>>>>> _______________________________________________
> > > >>>>>>> lldb-dev mailing list
> > > >>>>>>> lldb-dev@lists.llvm.org
> > > >>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> > > >
> > > 
> > > _______________________________________________
> > > lldb-dev mailing list
> > > lldb-dev@lists.llvm.org
> > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> > 
> > 
> 
> 

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

Reply via email to