Bug 959016 - Add lldb Python command handlers for debugging Gecko, starting with frametree and frametreelimited. (DONTBUILD) r=ehsan

This commit is contained in:
Cameron McCormack 2014-01-14 09:24:22 +11:00
parent 71a7b66679
commit 7a2dc7c7ea
6 changed files with 46 additions and 0 deletions

View File

@ -9,3 +9,8 @@ settings set target.inline-breakpoint-strategy always
# will show a variable declared as "nsIFrame *" that points to an nsBlockFrame
# object as being of type "nsBlockFrame *" rather than "nsIFrame *".
settings set target.prefer-dynamic-value run-target
# Import the module that defines complex Gecko debugging commands. Rather
# than do any kind of searching, this assumes that you are running lldb from
# the top level source directory.
script sys.path.append('python/lldbutils'); import lldbutils; lldbutils.init()

View File

@ -5374,6 +5374,12 @@ nsIFrame::DumpFrameTree()
RootFrameList(PresContext(), stdout, 0);
}
void
nsIFrame::DumpFrameTreeLimited()
{
List(stdout, 0);
}
void
nsIFrame::RootFrameList(nsPresContext* aPresContext, FILE* out, int32_t aIndent)
{

View File

@ -3261,6 +3261,7 @@ public:
static void RootFrameList(nsPresContext* aPresContext,
FILE* out, int32_t aIndent);
virtual void DumpFrameTree();
void DumpFrameTreeLimited();
NS_IMETHOD GetFrameName(nsAString& aResult) const = 0;
#endif

View File

@ -0,0 +1,12 @@
lldb debugging functionality for Gecko
--------------------------------------
This directory contains a module, lldbutils, which is imported by the
in-tree .lldbinit file. The lldbutil modules define some lldb commands
that are handy for debugging Gecko.
If you want to add a new command or Python-implemented type summary, either add
it to one of the existing broad area Python files (such as lldbutils/layout.py
for layout-related commands) or create a new file if none of the existing files
is appropriate. If you add a new file, make sure you add it to __all__ in
lldbutils/__init__.py.

View File

@ -0,0 +1,7 @@
import lldb
__all__ = ['layout']
def init():
for name in __all__:
__import__('lldbutils.' + name, globals(), locals(), ['init']).init(lldb.debugger)

View File

@ -0,0 +1,15 @@
import lldb
def frametree(debugger, command, result, dict):
"""Dumps the frame tree containing the given nsIFrame*."""
debugger.HandleCommand('expr (' + command + ')->DumpFrameTree()')
def frametreelimited(debugger, command, result, dict):
"""Dumps the subtree of a frame tree rooted at the given nsIFrame*."""
debugger.HandleCommand('expr (' + command + ')->DumpFrameTreeLimited()')
def init(debugger):
debugger.HandleCommand('command script add -f lldbutils.layout.frametree frametree')
debugger.HandleCommand('command script add -f lldbutils.layout.frametree frametreelimited')
debugger.HandleCommand('command alias ft frametree')
debugger.HandleCommand('command alias ftl frametree')