[llvm-commits] [llvm] r121184 - /llvm/trunk/utils/CollectDebugInfoUsingLLDB.py

Devang Patel dpatel at apple.com
Tue Dec 7 13:12:05 PST 2010


Author: dpatel
Date: Tue Dec  7 15:12:05 2010
New Revision: 121184

URL: http://llvm.org/viewvc/llvm-project?rev=121184&view=rev
Log:
Handle recursive values. Add comments.

Modified:
    llvm/trunk/utils/CollectDebugInfoUsingLLDB.py

Modified: llvm/trunk/utils/CollectDebugInfoUsingLLDB.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/CollectDebugInfoUsingLLDB.py?rev=121184&r1=121183&r2=121184&view=diff
==============================================================================
--- llvm/trunk/utils/CollectDebugInfoUsingLLDB.py (original)
+++ llvm/trunk/utils/CollectDebugInfoUsingLLDB.py Tue Dec  7 15:12:05 2010
@@ -1,11 +1,24 @@
 #!/usr/bin/python
 
 #----------------------------------------------------------------------
+# 
 # Be sure to add the python path that points to the LLDB shared library.
 # On MacOSX csh, tcsh:
 #   setenv PYTHONPATH /Developer/Library/PrivateFrameworks/LLDB.framework/Resources/Python
 # On MacOSX sh, bash:
 #   export PYTHONPATH=/Developer/Library/PrivateFrameworks/LLDB.framework/Resources/Python
+#
+# This script collect debugging information using LLDB. This script is
+# used by TEST=dbg in llvm testsuite to measure quality of debug info in
+# optimized builds.
+#
+# Usage:
+# export PYTHONPATH=...
+# ./CollectDebugInfUsingLLDB.py program bp_file out_file
+#     program - Executable program with debug info.
+#     bp_file - Simple text file listing breakpoints.
+#               <absolute file name> <line number>
+#     out_file - Output file where the debug info will be emitted.
 #----------------------------------------------------------------------
 
 import lldb
@@ -13,26 +26,46 @@
 import sys
 import time
 
+# AlreadyPrintedValues - A place to keep track of recursive values.
+AlreadyPrintedValues = {}
+
+# ISAlreadyPrinted - Return true if value is already printed.
+def IsAlreadyPrinted(value_name):
+        if AlreadyPrintedValues.get(value_name) is None:
+                AlreadyPrintedValues[value_name] = 1
+                return False
+        return True
+
+
+# print_var_value - Print a variable's value.
 def print_var_value (v, file, frame):
-        if v.GetNumChildren() > 0:
-            for c in range(v.GetNumChildren()):
-                if v.GetChildAtIndex(c) is None:
+        if v.IsValid() == False:
+                return
+        if IsAlreadyPrinted(v.GetName()):
+                return
+        total_children = v.GetNumChildren()
+        if total_children > 0:
+            c = 0
+            while (c < total_children) :
+                    child = v.GetChildAtIndex(c)
+                    if child is None:
                         file.write("None")
-                else:
-                        if (v.GetChildAtIndex(c).GetName()) is None:
+                    else:
+                        if (child.GetName()) is None:
                                 file.write("None")
                         else:
-                                file.write(v.GetChildAtIndex(c).GetName())
+                                file.write(child.GetName())
                                 file.write('=')
-                                print_var_value(v.GetChildAtIndex(c), file, frame)
+                                print_var_value(child, file, frame)
                                 file.write(',')
+                    c = c + 1
         else:
             if v.GetValue(frame) is None:
                 file.write("None")
             else:
                 file.write(v.GetValue(frame))
 
-
+# print_vars - Print variable values in output file.
 def print_vars (vars, fname, line, file, frame, target, thread):
     # disable this thread.
     count = thread.GetStopReasonDataCount()
@@ -51,7 +84,6 @@
             if bp_loc.IsValid():
                 bid = bp_loc.GetBreakPoint().GetID()
                 tid = bp_loc.ThreadGetID()
-                # print " { ", bp_loc.ThreadGetID(), " : ", bp_loc.GetBreakPoint().GetID(), " }} "
                 bp_loc.SetEnabled(False);
 
     for i in range(vars.GetSize()):
@@ -67,9 +99,11 @@
         v = vars.GetValueAtIndex(i)
         file.write(v.GetName())
         file.write(' ')
+        AlreadyPrintedValues.clear()
         print_var_value (v, file, frame)
         file.write('\n')
 
+# set_breakpoints - set breakpoints as listed in input file.
 def set_breakpoints (target, breakpoint_filename):
     f = open(breakpoint_filename, "r")
     lines = f.readlines()
@@ -79,21 +113,17 @@
         bp = target.BreakpointCreateByLocation (str(c[0]), int(c[1]))
     f.close()
 
-def stop_at_breakpoint (process):
+# stopeed_at_breakpoint - Return True if process is stopeed at a
+# breakpoint.
+def stopped_at_breakpoint (process):
     if process.IsValid():
         state = process.GetState()
-        if state != lldb.eStateStopped:
-            return lldb.eStateInvalid
-        thread = process.GetThreadAtIndex(0)
-        if thread.IsValid():
-            if thread.GetStopReason() == lldb.eStopReasonBreakpoint:
-                    return lldb.eStateStopped
-            else:
-                    return lldb.eStateInvalid
-        else:
-            return lldb.eStateInvalid
-    else:
-        return lldb.eStateInvalid
+        if state == lldb.eStateStopped:
+                thread = process.GetThreadAtIndex(0)
+                if thread.IsValid():
+                        if thread.GetStopReason() == lldb.eStopReasonBreakpoint:
+                                return True
+    return False
 
 # Create a new debugger instance
 debugger = lldb.SBDebugger.Create()
@@ -120,7 +150,7 @@
     process = target.LaunchProcess ([''], [''], "/dev/stdout", 0, False)
     file=open(str(sys.argv[3]), 'w')    
     # Make sure the launch went ok
-    while stop_at_breakpoint(process) == lldb.eStateStopped:
+    while stopped_at_breakpoint(process):
         thread = process.GetThreadAtIndex (0)
         frame = thread.GetFrameAtIndex (0)
         if frame.IsValid():





More information about the llvm-commits mailing list