Skip to content
Snippets Groups Projects
Commit 8e6d890a authored by Matthew Krafczyk's avatar Matthew Krafczyk
Browse files

-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.
parent a5fb33b0
Branches
Tags
No related merge requests found
...@@ -128,6 +128,8 @@ parser.add_argument('-p', '--profile', action='store_true', ...@@ -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(): ...@@ -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 @@ ...@@ -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(): ...@@ -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
...@@ -53,10 +59,29 @@ def set_debug(flag): ...@@ -53,10 +59,29 @@ def set_debug(flag):
def set_verbose(flag): def set_verbose(flag):
global _verbose global _verbose
_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): ...@@ -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): ...@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment