summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/bb/build.py2
-rw-r--r--lib/bb/utils.py43
2 files changed, 13 insertions, 32 deletions
diff --git a/lib/bb/build.py b/lib/bb/build.py
index 5e494deff..5f3986b1e 100644
--- a/lib/bb/build.py
+++ b/lib/bb/build.py
@@ -37,7 +37,7 @@ from bb import data, event, utils
bblogger = logging.getLogger('BitBake')
logger = logging.getLogger('BitBake.Build')
-NULL = open('/dev/null', 'a')
+NULL = open('/dev/null', 'r+')
class FuncFailed(Exception):
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index 986f94f3f..f5e4b60ab 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -297,12 +297,10 @@ def _print_trace(body, line):
"""
# print the environment of the method
min_line = max(1, line-4)
- max_line = min(line + 4, len(body))
+ max_line = min(line + 4, len(body)-1)
for i in xrange(min_line, max_line + 1):
- if line == i:
- logger.error(' *** %.4d:%s', i, body[i-1])
- else:
- logger.error(' %.4d:%s', i, body[i-1])
+ logger.error("\t%.4d:%s", i, body[i-1])
+
def better_compile(text, file, realfile, mode = "exec"):
"""
@@ -344,38 +342,21 @@ def better_exec(code, context, text, realfile = "<code>"):
if t in [bb.parse.SkipPackage, bb.build.FuncFailed]:
raise
- logger.error('There was an error when executing a python function in: %s', realfile)
+ logger.exception("Error executing python function in '%s'", code.co_filename)
# Strip 'us' from the stack (better_exec call)
tb = tb.tb_next
import traceback
- textarray = text.split('\n')
- linefailed = traceback.tb_lineno(tb)
-
tbextract = traceback.extract_tb(tb)
- tbformat = "\n".join(traceback.format_list(tbextract))
- logger.error("The stack trace of python calls that resulted in thie exception/failure was:")
- for line in tbformat.split('\n'):
- logger.error(line)
-
- logger.error("The code that was being executed was:")
- _print_trace(textarray, linefailed)
- logger.error("(file: '%s', lineno: %s, function: %s)", tbextract[0][0], tbextract[0][1], tbextract[0][2])
-
- # See if this is a function we constructed and has calls back into other functions in
- # "text". If so, try and improve the context of the error by diving down the trace
- level = 0
- nexttb = tb.tb_next
- while nexttb is not None:
- if tbextract[level][0] == tbextract[level+1][0] and tbextract[level+1][2] == tbextract[level][0]:
- _print_trace(textarray, tbextract[level+1][1])
- logger.error("(file: '%s', lineno: %s, function: %s)", tbextract[level+1][0], tbextract[level+1][1], tbextract[level+1][2])
- else:
- break
- nexttb = tb.tb_next
- level = level + 1
-
+ tbextract = "\n".join(traceback.format_list(tbextract))
+ bb.msg.error(bb.msg.domain.Util, "Traceback:")
+ for line in tbextract.split('\n'):
+ bb.msg.error(bb.msg.domain.Util, line)
+
+ line = traceback.tb_lineno(tb)
+ bb.msg.error(bb.msg.domain.Util, "The lines leading to this error were:")
+ _print_trace( text.split('\n'), line )
raise
def simple_exec(code, context):