summaryrefslogtreecommitdiffstats
path: root/lldb/scripts/utilsDebug.py
blob: 80038912b8d0844e85ba9bb0f1736ffdd25ea17d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
""" 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 = ""
OpenPOWER on IntegriCloud