Bug 877896 - Print stack trace in the console service. r=bholley

This commit is contained in:
Wei-Cheng Pan 2015-09-16 18:16:56 +08:00
Родитель 94fd801e68
Коммит fb94baa0ac
2 изменённых файлов: 51 добавлений и 0 удалений

Просмотреть файл

@ -16,6 +16,28 @@
#include "nsGlobalWindow.h"
#include "nsCycleCollectionParticipant.h"
namespace {
static nsCString
FormatStackString(JSContext* cx, HandleObject aStack) {
JS::RootedString formattedStack(cx);
if (!JS::BuildStackString(cx, aStack, &formattedStack)) {
return nsCString();
}
nsAutoJSString stackJSString;
if (!stackJSString.init(cx, formattedStack)) {
return nsCString();
}
return NS_ConvertUTF16toUTF8(stackJSString.get());
}
}
NS_IMPL_CYCLE_COLLECTION_CLASS(nsScriptErrorWithStack)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsScriptErrorWithStack)
@ -67,3 +89,31 @@ nsScriptErrorWithStack::GetStack(JS::MutableHandleValue aStack) {
aStack.setObjectOrNull(mStack);
return NS_OK;
}
NS_IMETHODIMP
nsScriptErrorWithStack::ToString(nsACString& /*UTF8*/ aResult)
{
MOZ_ASSERT(NS_IsMainThread());
nsCString message;
nsresult rv = nsScriptErrorBase::ToString(message);
NS_ENSURE_SUCCESS(rv, rv);
if (!mStack) {
aResult.Assign(message);
return NS_OK;
}
AutoJSAPI jsapi;
if (!jsapi.Init(mStack)) {
return NS_ERROR_FAILURE;
}
JSContext* cx = jsapi.cx();
RootedObject stack(cx, mStack);
nsCString stackString = FormatStackString(cx, stack);
nsCString combined = message + NS_LITERAL_CSTRING("\n") + stackString;
aResult.Assign(combined);
return NS_OK;
}

Просмотреть файл

@ -3029,6 +3029,7 @@ public:
const char* category) override;
NS_IMETHOD GetStack(JS::MutableHandleValue) override;
NS_IMETHOD ToString(nsACString& aResult) override;
private:
virtual ~nsScriptErrorWithStack();