-s now includes the file and line number with info
The option -s now causes file and line number information to be printed along with any invocation of msg, info, etc... This will greatly ease debugging.
This commit is contained in:
parent
a5fb33b0e4
commit
8e6d890a19
@ -128,6 +128,8 @@ parser.add_argument('-p', '--profile', action='store_true',
|
|||||||
help="Profile execution using cProfile.")
|
help="Profile execution using cProfile.")
|
||||||
parser.add_argument('-v', '--verbose', action='store_true',
|
parser.add_argument('-v', '--verbose', action='store_true',
|
||||||
help="Print additional output during builds")
|
help="Print additional output during builds")
|
||||||
|
parser.add_argument('-s', '--stacktrace', action='store_true',
|
||||||
|
help="Add stacktrace information to all printed statements")
|
||||||
parser.add_argument('-V', '--version', action='version',
|
parser.add_argument('-V', '--version', action='version',
|
||||||
version="%s" % spack.spack_version)
|
version="%s" % spack.spack_version)
|
||||||
|
|
||||||
@ -155,6 +157,7 @@ def main():
|
|||||||
# Set up environment based on args.
|
# Set up environment based on args.
|
||||||
tty.set_verbose(args.verbose)
|
tty.set_verbose(args.verbose)
|
||||||
tty.set_debug(args.debug)
|
tty.set_debug(args.debug)
|
||||||
|
tty.set_stacktrace(args.stacktrace)
|
||||||
spack.debug = args.debug
|
spack.debug = args.debug
|
||||||
|
|
||||||
if spack.debug:
|
if spack.debug:
|
||||||
|
@ -28,12 +28,14 @@
|
|||||||
import fcntl
|
import fcntl
|
||||||
import termios
|
import termios
|
||||||
import struct
|
import struct
|
||||||
|
import traceback
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
|
||||||
from llnl.util.tty.color import *
|
from llnl.util.tty.color import *
|
||||||
|
|
||||||
_debug = False
|
_debug = False
|
||||||
_verbose = False
|
_verbose = False
|
||||||
|
_stacktrace = False
|
||||||
indent = " "
|
indent = " "
|
||||||
|
|
||||||
|
|
||||||
@ -45,6 +47,10 @@ def is_debug():
|
|||||||
return _debug
|
return _debug
|
||||||
|
|
||||||
|
|
||||||
|
def is_stacktrace():
|
||||||
|
return _stacktrace
|
||||||
|
|
||||||
|
|
||||||
def set_debug(flag):
|
def set_debug(flag):
|
||||||
global _debug
|
global _debug
|
||||||
_debug = flag
|
_debug = flag
|
||||||
@ -55,8 +61,27 @@ def set_verbose(flag):
|
|||||||
_verbose = flag
|
_verbose = flag
|
||||||
|
|
||||||
|
|
||||||
|
def set_stacktrace(flag):
|
||||||
|
global _stacktrace
|
||||||
|
_stacktrace = flag
|
||||||
|
|
||||||
|
|
||||||
|
def process_stacktrace(countback):
|
||||||
|
"""Returns a string with the file and line of the stackframe 'countback' frames from the bottom of the stack"""
|
||||||
|
st = traceback.extract_stack()
|
||||||
|
#First entry should be bin/spack. Use this to get spack 'root'.
|
||||||
|
#bin/spack is 9 characters, the length of the 'root' is then len-9.
|
||||||
|
root_len = len(st[0][0])-9
|
||||||
|
st_idx = len(st)-countback-1
|
||||||
|
st_text = "%s:%i " % (st[st_idx][0][root_len:], st[st_idx][1])
|
||||||
|
return st_text
|
||||||
|
|
||||||
|
|
||||||
def msg(message, *args):
|
def msg(message, *args):
|
||||||
cprint("@*b{==>} %s" % cescape(message))
|
st_text = ""
|
||||||
|
if _stacktrace:
|
||||||
|
st_text = process_stacktrace(2)
|
||||||
|
cprint("@*b{%s==>} %s" % (st_text, cescape(message)))
|
||||||
for arg in args:
|
for arg in args:
|
||||||
print indent + str(arg)
|
print indent + str(arg)
|
||||||
|
|
||||||
@ -66,8 +91,12 @@ def info(message, *args, **kwargs):
|
|||||||
stream = kwargs.get('stream', sys.stdout)
|
stream = kwargs.get('stream', sys.stdout)
|
||||||
wrap = kwargs.get('wrap', False)
|
wrap = kwargs.get('wrap', False)
|
||||||
break_long_words = kwargs.get('break_long_words', False)
|
break_long_words = kwargs.get('break_long_words', False)
|
||||||
|
st_countback = kwargs.get('countback', 3)
|
||||||
|
|
||||||
cprint("@%s{==>} %s" % (format, cescape(str(message))), stream=stream)
|
st_text = ""
|
||||||
|
if _stacktrace:
|
||||||
|
st_text = process_stacktrace(st_countback)
|
||||||
|
cprint("@%s{%s==>} %s" % (format, st_text, cescape(str(message))), stream=stream)
|
||||||
for arg in args:
|
for arg in args:
|
||||||
if wrap:
|
if wrap:
|
||||||
lines = textwrap.wrap(
|
lines = textwrap.wrap(
|
||||||
@ -105,6 +134,7 @@ def warn(message, *args, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
def die(message, *args, **kwargs):
|
def die(message, *args, **kwargs):
|
||||||
|
kwargs.setdefault('countback', 4)
|
||||||
error(message, *args, **kwargs)
|
error(message, *args, **kwargs)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user