diff --git a/Nasal/debug.nas b/Nasal/debug.nas
index 774d32159..c3fd75eb9 100644
--- a/Nasal/debug.nas
+++ b/Nasal/debug.nas
@@ -305,7 +305,18 @@ var funcname = func(f) {
     return "-unknown-";
 }
 
-var backtrace = func(desc = nil, dump_vars = 1, skip_level = 0) {
+# Write backtrace information.
+#
+# desc:
+#   Text to write in first line.
+# dump_vars:
+#   If true, show info about variables.
+# skip_level:
+#   How many top-level stack frames to skip.
+# shorten:
+#   If greater than 10, max filename length before being trimmed.
+#
+var backtrace = func(desc = nil, dump_vars = 1, skip_level = 0, shorten = 50) {
     var d = (desc == nil) ? "" : " '" ~ desc ~ "'";
     print("");
     print(_title("### backtrace" ~ d ~ " ###"));
@@ -314,6 +325,8 @@ var backtrace = func(desc = nil, dump_vars = 1, skip_level = 0) {
         if ((var v = caller(i)) == nil) return caller(i - 1);
         var filename = v[2];
         var line = v[3];
+        if (shorten >= 10 and size(filename) > shorten)
+            filename = substr(filename, 0, 5)~"[...]"~substr(filename, -(shorten-10));
         print(_section(sprintf("#%-2d called from %s:%d (%s) (locals %s):", 
             i - skip_level, filename, line, funcname(v[1]), id(v[0]))));
         if (dump_vars) dump(v[0]);