[lldb-dev] Different Behavior between Terminal and GUI simulated terminal

Yin Ma yin at affinic.com
Fri Oct 4 13:22:02 PDT 2013


Hi Jim

There is no special reason not to use the SB API. 
I understand it is very powerful and convenient.
If I create a new GUI from scratch, I will definitely
go for API directly. Because our GUI framework is already there 
and we want to one framework supports both gui and lldb,
I picked a way to minimize the change to our existing
Framework. 

Now when our GUI launches lldb, it will at first load
A python script that defines a series of new commands.
Those new commands simulate the usage to API instead of 
calling API directly. Hope this way can handle all
Features I need.

Thanks,

Yin 


-----Original Message-----
From: jingham at apple.com [mailto:jingham at apple.com] 
Sent: Friday, October 04, 2013 12:32 PM
To: Yin Ma
Cc: Richard Mitton; lldb-dev at cs.uiuc.edu
Subject: Re: [lldb-dev] Different Behavior between Terminal and GUI simulated terminal

I agree with Richard, parsing command output to drive lldb is a way that leads to madness.  The tools that do this using gdb at least have annotate and/or the MI output format from gdb's command line to help them out, and even then it's a huge pain (and I speak as one who has spent a number of years doing this.)  But I would be very resistant to accepting patches that would add an annotate or MI-like feature to lldb's command interpreter.  That would needlessly complicate the Command Interpreter code, and seems like wasted effort when we've gone to a lot of trouble to provide the SB API's so that programmatically driving lldb will be convenient and supportable.

Is there any compelling reason not to use the SB API's?

Jim

On Oct 4, 2013, at 11:08 AM, Yin Ma <yin at affinic.com> wrote:

> Hi Richard,
>  
> Thank you for digging down the detail for this problem.
> Hope this problem could be fixed soon.
>  
> Yes, we are porting our debugger GUI for GDB to support
> lldb. Its existing framework is based on capturing output.
> I am writing some python commands to create a bridge to
> generate parser friendly output. I am working feature
> by feature. I hope this way can  work for all features.
>  
> Thanks,
>  
> Yin
>  
> From: Richard Mitton [mailto:richard at codersnotes.com] 
> Sent: Friday, October 04, 2013 10:21 AM
> To: jingham at apple.com
> Cc: Yin Ma; lldb-dev at cs.uiuc.edu
> Subject: Re: [lldb-dev] Different Behavior between Terminal and GUI simulated terminal
>  
> I've noticed this same bug myself, and actually spent a while this week trying to fix it (with no luck).
> 
> The problem is simply a threading race condition, which manifests sometimes. You can usually (on Linux at least) trigger it by just doing a 'run' repeatedly until it happens.
> 
> It's because the process's input reader is created asynchronously on a thread, so isn't guaranteed to be at the top of the input stack at the time the 'run' command has finished. So the driver may or may not try to refresh the prompt.
> 
> I don't have a fix for this I'm afraid.
> 
> Also, regarding the original problem, it sounds to me like you're trying to capture the lldb output so you can build a debugger interface on top (like GDB interfaces often work). For what it's worth, this is a really bad idea. lldb has a C++ and Python API which are much better suited for that kind of thing. 
> 
> -- 
> Richard Mitton
> richard at codersnotes.com
> 
> 
> <image001.jpg>
> jingham at apple.com
> Friday, October 04, 2013 8:41 AM
> Did you launch the two processes in the same way in both cases? It looks like in the first instance lldb is running synchronously, and in the second instance asynchronously. I sent a note to the list a couple of days ago describing when lldb uses the two modes, check that and see if it explains what you are seeing. Otherwise, this may be some bug in the input driver?
> 
> Jim
> 
> 
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> <image001.jpg>
> Yin Ma
> Thursday, October 03, 2013 11:30 PM
> Hi,
>  
> I got different behavior between run lldb under regular terminal
> And GUI simulated terminal (posix_openpt or pipe based).
>  
> In the regular terminal:
> (lldb) run
> Process 10992 launched: ‘…’
> Process 10992 stopped
>  Thread …
>  
> In the GUI, If I run the same thing, I got
> (lldb) run
> Process 10992 launched: ‘…’
> (lldb) Process 10992 stopped
>  Thread …
>  
> There already is (lldb) after the first line.
>  
> My lldb is 179.5
> Could anybody let me know why there is this difference?
> And How to switch to the regular mode?
>  
> Thanks,
>  
> Yin
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev





More information about the lldb-dev mailing list