summaryrefslogtreecommitdiffstats
path: root/lldb/scripts/utilsDebug.py
blob: bf5410aee5ea9664a5eb4fb7313035c22bf675a4 (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
126
127
128
129
130
131
132
133
""" Utility module to help debug Python scripts

	--------------------------------------------------------------------------
	File: 			utilsDebug.py

	Overview: 		Python module to supply functions to help debug Python
					scripts.
									
	Environment:	OS:			Windows/LINUX/OSX
					IDE: 	    Visual Studio 2013 Plugin Python Tools (PTVS)
					Script:		Python 2.6 x64 

	Gotchas:		None.

	Copyright:		None.
	--------------------------------------------------------------------------
	
"""

# Python modules:

# 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:
	# 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 CDebugFnVerbose.bVerboseOn == False:
			return;
		print "%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 CDebugFnVerbose.bVerboseOn == False:
			return;
		print "%d%s> Dp: %s" % (CDebugFnVerbose.__nLevel, self.__get_dots(),
								vstrText);
				
	# Private methods:
	def __init__( self, vstrFnName ):
		self.__indent_out( vstrFnName );
		
	# Class destructor 
	def __del__( self ):
		self.__indent_back();
		
	#++------------------------------------------------------------------------
	# 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