forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			126 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
""" Utility module to help debug Python scripts
 | 
						|
 | 
						|
    --------------------------------------------------------------------------
 | 
						|
    File: utilsDebug.py
 | 
						|
 | 
						|
    Overview:  Python module to supply functions to help debug Python
 | 
						|
               scripts.
 | 
						|
    Gotchas:   None.
 | 
						|
    Copyright: None.
 | 
						|
    --------------------------------------------------------------------------
 | 
						|
"""
 | 
						|
 | 
						|
# Python modules:
 | 
						|
import sys
 | 
						|
 | 
						|
# Third party modules:
 | 
						|
 | 
						|
# In-house modules:
 | 
						|
 | 
						|
# Instantiations:
 | 
						|
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
# Details: Class to implement simple stack function trace. Instantiation the
 | 
						|
#          class as the first function you want to trace. Example:
 | 
						|
#          obj = utilsDebug.CDebugFnVerbose("validate_arguments()")
 | 
						|
# Gotchas: This class will not work in properly in a multi-threaded
 | 
						|
#          environment.
 | 
						|
# Authors: Illya Rudkin 28/11/2013.
 | 
						|
# Changes: None.
 | 
						|
#--
 | 
						|
 | 
						|
 | 
						|
class CDebugFnVerbose(object):
 | 
						|
    # Public static properties:
 | 
						|
    bVerboseOn = False  # True = turn on function tracing, False = turn off.
 | 
						|
 | 
						|
    # Public:
 | 
						|
    #++------------------------------------------------------------------------
 | 
						|
    # Details: CDebugFnVerbose constructor.
 | 
						|
    # Type:    Method.
 | 
						|
    # Args:    vstrFnName - (R) Text description i.e. a function name.
 | 
						|
    # Return:  None.
 | 
						|
    # Throws:  None.
 | 
						|
    #--
 | 
						|
    # CDebugFnVerbose(vstrFnName)
 | 
						|
 | 
						|
    #++------------------------------------------------------------------------
 | 
						|
    # Details: Print out information on the object specified.
 | 
						|
    # Type:    Method.
 | 
						|
    # Args:    vstrText - (R) Some helper text description.
 | 
						|
    #          vObject - (R) Some Python type object.
 | 
						|
    # Return:  None.
 | 
						|
    # Throws:  None.
 | 
						|
    #--
 | 
						|
    def dump_object(self, vstrText, vObject):
 | 
						|
        if not CDebugFnVerbose.bVerboseOn:
 | 
						|
            return
 | 
						|
        sys.stdout.write(
 | 
						|
            "%d%s> Dp: %s" %
 | 
						|
            (CDebugFnVerbose.__nLevel,
 | 
						|
             self.__get_dots(),
 | 
						|
             vstrText))
 | 
						|
        print(vObject)
 | 
						|
 | 
						|
    #++------------------------------------------------------------------------
 | 
						|
    # Details: Print out some progress text given by the client.
 | 
						|
    # Type:    Method.
 | 
						|
    # Args:    vstrText - (R) Some helper text description.
 | 
						|
    # Return:  None.
 | 
						|
    # Throws:  None.
 | 
						|
    #--
 | 
						|
    def dump_text(self, vstrText):
 | 
						|
        if not CDebugFnVerbose.bVerboseOn:
 | 
						|
            return
 | 
						|
        print(("%d%s> Dp: %s" % (CDebugFnVerbose.__nLevel, self.__get_dots(),
 | 
						|
                                 vstrText)))
 | 
						|
 | 
						|
    # Private methods:
 | 
						|
    def __init__(self, vstrFnName):
 | 
						|
        self.__indent_out(vstrFnName)
 | 
						|
 | 
						|
    #++------------------------------------------------------------------------
 | 
						|
    # Details: Build an indentation string of dots based on the __nLevel.
 | 
						|
    # Type:    Method.
 | 
						|
    # Args:    None.
 | 
						|
    # Return:  Str - variable length string.
 | 
						|
    # Throws:  None.
 | 
						|
    #--
 | 
						|
    def __get_dots(self):
 | 
						|
        return "".join("." for i in range(0, CDebugFnVerbose.__nLevel))
 | 
						|
 | 
						|
    #++------------------------------------------------------------------------
 | 
						|
    # Details: Build and print out debug verbosity text indicating the function
 | 
						|
    #          just exited from.
 | 
						|
    # Type:    Method.
 | 
						|
    # Args:    None.
 | 
						|
    # Return:  None.
 | 
						|
    # Throws:  None.
 | 
						|
    #--
 | 
						|
    def __indent_back(self):
 | 
						|
        if CDebugFnVerbose.bVerboseOn:
 | 
						|
            print(("%d%s< fn: %s" % (CDebugFnVerbose.__nLevel,
 | 
						|
                                     self.__get_dots(), self.__strFnName)))
 | 
						|
        CDebugFnVerbose.__nLevel -= 1
 | 
						|
 | 
						|
    #++------------------------------------------------------------------------
 | 
						|
    # Details: Build and print out debug verbosity text indicating the function
 | 
						|
    #          just entered.
 | 
						|
    # Type:    Method.
 | 
						|
    # Args:    vstrFnName - (R) Name of the function entered.
 | 
						|
    # Return:  None.
 | 
						|
    # Throws:  None.
 | 
						|
    #--
 | 
						|
    def __indent_out(self, vstrFnName):
 | 
						|
        CDebugFnVerbose.__nLevel += 1
 | 
						|
        self.__strFnName = vstrFnName
 | 
						|
        if CDebugFnVerbose.bVerboseOn:
 | 
						|
            print(("%d%s> fn: %s" % (CDebugFnVerbose.__nLevel,
 | 
						|
                                     self.__get_dots(), self.__strFnName)))
 | 
						|
 | 
						|
    # Private statics attributes:
 | 
						|
    __nLevel = 0  # Indentation level counter
 | 
						|
 | 
						|
    # Private attributes:
 | 
						|
    __strFnName = ""
 |