> On Nov 11, 2018, at 10:30 AM, Alexander Polyakov <polyakov....@gmail.com> 
> wrote:
> 
> The data formatter in lldb is a subsystem that allows users to define custom 
> display options, the Platform is the agent that provides a way to work with a 
> specific platform. I agree that we need the Platform to provide the OS 
> specific data formatters, but also the Platform should have a functionality 
> to find all OS mutexes, am I right?

Yes, that seems right to me.

Jim


> 
> On Thu, Nov 1, 2018 at 7:37 PM Jim Ingham <jing...@apple.com> wrote:
> I don’t think we are disagreeing, probably I was just being a little too 
> terse.  What I’m saying is that to PRESENT a mutex in some detail, we need an 
> OS specific data formatter, so in that case, we just need some agent, either 
> the Platform or the SystemRuntime (but the Platform seems better to me for 
> this) to provide the OS specific data formatters.  But we don’t need a new 
> facility for that, just a way to dial up the right OS-specific instances.  
> And if we can reuse more general features to present this sort of OS specific 
> info we are better off; it reduces lldb’s surface area and provides 
> facilities we might find other neat ways to use.
> 
> OTOH, for a runtime feature like “Gather all the mutexes currently in flight” 
> we would need some new code.  There’s nothing in lldb that does that sort of 
> job.  The SystemRuntime seems like the right place for that code to go.
> 
> Jim
> 
> 
>> On Nov 1, 2018, at 1:25 AM, Alexander Polyakov <polyakov....@gmail.com> 
>> wrote:
>> 
>> I'm new in plugin ecosystem, so I have some misunderstanding. You wrote that 
>> to comprehend mutexes we just need a data formatter, but how can we get the 
>> raw data of all mutexes in our OS? I thought I was supposed to write a 
>> generic code that will use a user-defined (specific for each OS) way to 
>> collect all mutexes and then use some data formatter to show them.
>> 
>> On Thu, Nov 1, 2018 at 2:31 AM Jim Ingham <jing...@apple.com> wrote:
>> As Jason pointed out, we also have the SystemRuntime Plugin.  That is 
>> intended to provide extra runtime available information based on the current 
>> system.  For instance, on Darwin we use it to present the libdispatch queue 
>> view of threads on the system, and to decorate threads that are doing work 
>> on behalf of some queue with the state of the thread that enqueued the work 
>> at the time the work  item was enqueued.
>> 
>> If for instance you had a way to gather all the locks in the process 
>> (something we've been asked to do but I don't know how to do it on 
>> Darwin...), that would be the place to put that functionality.
>> 
>> Jim
>> 
>> 
>> > On Oct 31, 2018, at 4:05 PM, Jim Ingham via lldb-dev 
>> > <lldb-dev@lists.llvm.org> wrote:
>> > 
>> > Right now, the OS plugin only supports the job of adding threads.  And 
>> > that makes more sense as a plugin, because for instance if you had a 
>> > cooperative threading scheme that you were laying on top of the system 
>> > threads in a User Space process, you can use the Operating System plugin 
>> > to show you the cooperative threads.  This is not an abstract example...  
>> > I think it should stay with just that job.
>> > 
>> > The place where lldb holds this sort of knowledge is supposed to be in the 
>> > Platform class.  So for instance, to comprehend mutexes you really just 
>> > need a data formatter.  The trick is that it has to be a data formatter 
>> > that is provided by the platform.  Similarly you want to have frame 
>> > recognizers for interesting lower-level calls in the system.  The 
>> > machinery will shortly be there to do that, but loading the particular 
>> > recognizers will either need to be done by hand, or coordinated by the 
>> > Platform.  In general, I think most of the kinds of re-presentation you 
>> > need to do to make OS objects and processes more comprehensible can be 
>> > built as general mechanisms like the above.  Then the Platform can 
>> > coordinate providing the set of more general transformations that are 
>> > appropriate to the Platform you are targeting.
>> > 
>> > Jim
>> > 
>> > 
>> > 
>> >> On Oct 31, 2018, at 3:44 PM, Alexander Polyakov <polyakov....@gmail.com> 
>> >> wrote:
>> >> 
>> >> So, if I understand you write, I can look at OS plugin and add a support 
>> >> of mutexes or memory pages for example?
>> >> 
>> >> чт, 1 нояб. 2018 г. в 1:05, Jim Ingham <jing...@apple.com>:
>> >> lldb has one feature - the "Operating System Plugin" that is specifically 
>> >> designed for debugging threads in kernel contexts.  The OS plugin allows 
>> >> a kernel to present it's notion of threads into lldb_private::Threads.  
>> >> The xnu kernel macros have an implementation of this, as do some other 
>> >> embedded OS'es.  lldb actually gets used pretty extensively for debugging 
>> >> xnu - the Darwin kernel.
>> >> 
>> >> Kuba is adding the notion of "Frame recognizers" which can give 
>> >> significance to particular functions when they appear on the stack (for 
>> >> instance displaying the first argument of read, etc. as a file handle 
>> >> even if you have no debug information for it.)  That's another way that 
>> >> you could express your understanding of the OS you are running on for 
>> >> debugger users.  Greg wrote a data formatter for the Darwin 
>> >> implementation of pthread_mutex that shows the thread that has the lock 
>> >> and some other information like that.  So data formatters are also a way 
>> >> lldb can express knowledge of the host OS.
>> >> 
>> >> Jim
>> >> 
>> >>> On Oct 31, 2018, at 12:52 PM, Leonard Mosescu via lldb-dev 
>> >>> <lldb-dev@lists.llvm.org> wrote:
>> >>> 
>> >>> Conceptually it's different levels of abstraction: a user-mode debugger 
>> >>> handles processes, threads as first class concepts. In kernel-mode (or 
>> >>> kernel land), these are just data structures that the code (the kernel) 
>> >>> is managing. From a more pragmatic perspective, the difference is in 
>> >>> where the debugging hooks are implemented and what interfaces are 
>> >>> exposed (for example a kernel mode debugger can normally "poke" around 
>> >>> any piece of memory and it has to be aware of things like VA mappings, 
>> >>> while a user-mode debugger is only allowed to control a limited slice of 
>> >>> the system - ex. control a sub-process through something like ptrace)
>> >>> 
>> >>> Unless you're specifically looking at kernel debugging I'd stay away 
>> >>> from that. For one thing, LLDB is mostly used as an user-mode debugger 
>> >>> so the impact of any improvements would be bigger.
>> >>> 
>> >>> Regarding the value of OS-awareness for user-mode debugging, I agree 
>> >>> with Zach - for example windbg provides both kernel mode and user mode 
>> >>> !locks commands. The only suggestion I'd add is to consider an expanded 
>> >>> view of the "OS" to include runtime components which may not be 
>> >>> technically part of what most people think of as the "OS": user-mode 
>> >>> loaders and high level things like std::mutex, etc.
>> >>> 
>> >>> On Wed, Oct 31, 2018 at 12:29 PM, Alexander Polyakov 
>> >>> <polyakov....@gmail.com> wrote:
>> >>> Looks like I don't completely understand what is the difference between 
>> >>> user-mode and kernel-mode from the debugger's point of view. Could you 
>> >>> please explain me this?
>> >>> 
>> >>> On Wed, Oct 31, 2018 at 10:22 PM Zachary Turner <ztur...@google.com> 
>> >>> wrote:
>> >>> I don’t totally agree with this. I think there are a lot of useful os 
>> >>> awareness tasks in user mode. For example, you’re debugging a deadlock 
>> >>> and want to understand the state of other mutexes, who owns them, etc. 
>> >>> or you want to examine open file descriptors. In the case of a heap 
>> >>> corruption you may wish to study the internal structures of your 
>> >>> process’s heap, or even lower level, the os virtual memory page table 
>> >>> structures.
>> >>> 
>> >>> There’s quite a lot you can still do in user mode, but definitely there 
>> >>> is more in kernel mode. As Leonard said, try put WinDbg as a lot of this 
>> >>> stuff already exists so it’s a good reference 
>> >>> On Wed, Oct 31, 2018 at 12:08 PM Alexander Polyakov via lldb-dev 
>> >>> <lldb-dev@lists.llvm.org> wrote:
>> >>> Hi Leonard,
>> >>> 
>> >>> I think it will be kernel-mode debugging since debugging an application 
>> >>> in user mode is not an OS awareness imo. Of course, some of kernel's 
>> >>> modules might run in user-mode, but it will be ok I think.
>> >>> 
>> >>> Thanks for your reference, I'll take a look at it. 
>> >>> 
>> >>> Also, I found out that ARM supports OS awareness in their DS-5 debugger. 
>> >>> They have a mechanism for adding new operating systems. All you need to 
>> >>> do is to describe OS' model (thread's or task's structure for example). 
>> >>> I think that is how it might be done in LLDB.
>> >>> 
>> >>> On Wed, Oct 31, 2018 at 9:26 PM Leonard Mosescu <mose...@google.com> 
>> >>> wrote:
>> >>> Hi Alexander, are you interested in user-mode, kernel-mode debugging or 
>> >>> both?
>> >>> 
>> >>> Fore reference, the current state of the art regarding OS-awareness 
>> >>> debugging is debugging tools for windows (windbg & co.). This is not 
>> >>> surprising since the tools were developed alongside Windows. Obviously 
>> >>> they are specific to Windows, but it's good example of how the 
>> >>> OS-awareness might look like.
>> >>> 
>> >>> 
>> >>> On Mon, Oct 29, 2018 at 11:37 AM, Alexander Polyakov via lldb-dev 
>> >>> <lldb-dev@lists.llvm.org> wrote:
>> >>> Hi lldb-dev,
>> >>> 
>> >>> I'm a senior student at Saint Petersburg State University. The one of my 
>> >>> possible diploma themes is "OS Awareness in LLDB". Generally, the OS 
>> >>> awareness extends a debugger to provide a representation of the OS 
>> >>> threads - or tasks - and other relevant data structures, typically 
>> >>> semaphores, mutexes, or queues.
>> >>> 
>> >>> I want to ask the community if OS awareness is interesting for LLDB 
>> >>> users and developers? The main goal is to create some base on top of 
>> >>> LLDB that can be extended to support awareness for different operating 
>> >>> systems.
>> >>> 
>> >>> Also, if you have a good article or other useful information about OS 
>> >>> awareness, please share it with me.
>> >>> 
>> >>> Thanks in advance!
>> >>> 
>> >>> -- 
>> >>> Alexander
>> >>> 
>> >>> _______________________________________________
>> >>> lldb-dev mailing list
>> >>> lldb-dev@lists.llvm.org
>> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>> >>> 
>> >>> 
>> >>> 
>> >>> 
>> >>> -- 
>> >>> Alexander
>> >>> _______________________________________________
>> >>> lldb-dev mailing list
>> >>> lldb-dev@lists.llvm.org
>> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>> >>> 
>> >>> 
>> >>> -- 
>> >>> Alexander
>> >>> 
>> >>> _______________________________________________
>> >>> lldb-dev mailing list
>> >>> lldb-dev@lists.llvm.org
>> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>> >> 
>> >> -- 
>> >> Alexander
>> > 
>> > _______________________________________________
>> > lldb-dev mailing list
>> > lldb-dev@lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>> 
>> 
>> 
>> -- 
>> Alexander
> 
> 
> 
> -- 
> Alexander

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

Reply via email to