From 67a5fdbcc2d86cda9ee2efb7a97cb458036d6927 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 17 Dec 1993 12:09:14 +0000 Subject: * mpzmodule.c: cast some methods to the proper type. * traceback.c (tb_print): use sys.tracebacklimit as a maximum number of traceback entries to print (default 1000). * ceval.c (printtraceback): Don't print stack trace header -- this is now done by tb_print(). --- Python/traceback.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'Python/traceback.c') diff --git a/Python/traceback.c b/Python/traceback.c index 6ed19178ef..f14f0ecb79 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -219,14 +219,23 @@ tb_displayline(f, filename, lineno) } static void -tb_printinternal(tb, f) +tb_printinternal(tb, f, limit) tracebackobject *tb; object *f; + int limit; { + int depth = 0; + tracebackobject *tb1 = tb; + while (tb1 != NULL) { + depth++; + tb1 = tb1->tb_next; + } while (tb != NULL && !intrcheck()) { - tb_displayline(f, - getstringvalue(tb->tb_frame->f_code->co_filename), - tb->tb_lineno); + if (depth <= limit) + tb_displayline(f, + getstringvalue(tb->tb_frame->f_code->co_filename), + tb->tb_lineno); + depth--; tb = tb->tb_next; } } @@ -236,6 +245,8 @@ tb_print(v, f) object *v; object *f; { + object *limitv; + int limit = 1000; if (v == NULL) return 0; if (!is_tracebackobject(v)) { @@ -243,6 +254,13 @@ tb_print(v, f) return -1; } sysset("last_traceback", v); - tb_printinternal((tracebackobject *)v, f); + limitv = sysget("tracebacklimit"); + if (limitv && is_intobject(limitv)) { + limit = getintvalue(limitv); + if (limit <= 0) + return 0; + } + writestring("Traceback (innermost last):\n", f); + tb_printinternal((tracebackobject *)v, f, limit); return 0; } -- cgit v1.2.1