diff --git a/xpcom/base/nsDebugImpl.cpp b/xpcom/base/nsDebugImpl.cpp
index 367281809d6c5de6b8524607e5d387e4d93e8e55..6c7a7f3576a247bba2de264f84fdf3a793d61d5d 100644
--- a/xpcom/base/nsDebugImpl.cpp
+++ b/xpcom/base/nsDebugImpl.cpp
@@ -182,7 +182,8 @@ enum nsAssertBehavior {
   NS_ASSERT_SUSPEND,
   NS_ASSERT_STACK,
   NS_ASSERT_TRAP,
-  NS_ASSERT_ABORT
+  NS_ASSERT_ABORT,
+  NS_ASSERT_STACK_AND_ABORT
 };
 
 static nsAssertBehavior GetAssertBehavior()
@@ -216,6 +217,9 @@ static nsAssertBehavior GetAssertBehavior()
    if (!strcmp(assertString, "trap") || !strcmp(assertString, "break"))
      return gAssertBehavior = NS_ASSERT_TRAP;
 
+   if (!strcmp(assertString, "stack-and-abort"))
+     return gAssertBehavior = NS_ASSERT_STACK_AND_ABORT;
+
    fprintf(stderr, "Unrecognized value of XPCOM_DEBUG_BREAK\n");
    return gAssertBehavior;
 }
@@ -342,6 +346,10 @@ NS_DebugBreak(PRUint32 aSeverity, const char *aStr, const char *aExpr,
      nsTraceRefcntImpl::WalkTheStack(stderr);
      return;
 
+   case NS_ASSERT_STACK_AND_ABORT:
+     nsTraceRefcntImpl::WalkTheStack(stderr);
+     // Fall through to abort
+
    case NS_ASSERT_ABORT:
      Abort(buf.buffer);
      return;