@@ -140,6 +140,9 @@ void NativeScriptException::Init() {
140140
141141 NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID = env.GetStaticMethodID (NATIVESCRIPTEXCEPTION_CLASS, " getStackTraceAsString" , " (Ljava/lang/Throwable;)Ljava/lang/String;" );
142142 assert (NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID != nullptr );
143+
144+ NATIVESCRIPTEXCEPTION_GET_MESSAGE_METHOD_ID = env.GetStaticMethodID (NATIVESCRIPTEXCEPTION_CLASS, " getMessage" , " (Ljava/lang/Throwable;)Ljava/lang/String;" );
145+ assert (NATIVESCRIPTEXCEPTION_GET_MESSAGE_METHOD_ID != nullptr );
143146}
144147
145148// ON V8 UNCAUGHT EXCEPTION
@@ -204,7 +207,8 @@ Local<Value> NativeScriptException::WrapJavaToJsException() {
204207
205208Local<Value> NativeScriptException::GetJavaExceptionFromEnv (const JniLocalRef& exc, JEnv& env) {
206209 auto errMsg = GetExceptionMessage (env, exc);
207- DEBUG_WRITE (" Error during java interop errorMessage %s" , errMsg.c_str ());
210+ auto stackTrace = GetExceptionStackTrace (env, exc);
211+ DEBUG_WRITE (" Error during java interop errorMessage: %s\n stackTrace:\n %s" , errMsg.c_str (), stackTrace.c_str ());
208212
209213 auto isolate = Isolate::GetCurrent ();
210214 auto objectManager = Runtime::GetObjectManager (isolate);
@@ -223,6 +227,10 @@ Local<Value> NativeScriptException::GetJavaExceptionFromEnv(const JniLocalRef& e
223227 auto context = isolate->GetCurrentContext ();
224228 errObj->Set (context, V8StringConstants::GetNativeException (isolate), nativeExceptionObject);
225229
230+ string jsStackTraceMessage = GetErrorStackTrace (Exception::GetStackTrace (errObj));
231+ errObj->Set (context, V8StringConstants::GetStack (isolate), ArgConverter::ConvertToV8String (isolate, jsStackTraceMessage));
232+ errObj->Set (context, V8StringConstants::GetStackTrace (isolate), ArgConverter::ConvertToV8String (isolate, jsStackTraceMessage + stackTrace));
233+
226234 return errObj;
227235}
228236
@@ -362,15 +370,17 @@ string NativeScriptException::GetErrorStackTrace(const Local<StackTrace>& stackT
362370 auto lineNumber = frame->GetLineNumber ();
363371 auto column = frame->GetColumn ();
364372
365- ss << " \t " << (i > 0 ? " at " : " " ) << funcName.c_str () << " (" << srcName.c_str () << " :" << lineNumber << " :" << column << " )" << endl;
373+ auto startString = i == 0 ? " " : " \t " ;
374+
375+ ss << startString << (i > 0 ? " at " : " " ) << funcName.c_str () << " (" << srcName.c_str () << " :" << lineNumber << " :" << column << " )" << endl;
366376 }
367377
368378 return ss.str ();
369379}
370380
371381string NativeScriptException::GetExceptionMessage (JEnv& env, jthrowable exception) {
372382 string errMsg;
373- JniLocalRef msg (env.CallStaticObjectMethod (NATIVESCRIPTEXCEPTION_CLASS, NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID , exception));
383+ JniLocalRef msg (env.CallStaticObjectMethod (NATIVESCRIPTEXCEPTION_CLASS, NATIVESCRIPTEXCEPTION_GET_MESSAGE_METHOD_ID , exception));
374384
375385 const char * msgStr = env.GetStringUTFChars (msg, nullptr );
376386
@@ -381,9 +391,23 @@ string NativeScriptException::GetExceptionMessage(JEnv& env, jthrowable exceptio
381391 return errMsg;
382392}
383393
394+ string NativeScriptException::GetExceptionStackTrace (JEnv& env, jthrowable exception) {
395+ string errStackTrace;
396+ JniLocalRef msg (env.CallStaticObjectMethod (NATIVESCRIPTEXCEPTION_CLASS, NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID, exception));
397+
398+ const char * msgStr = env.GetStringUTFChars (msg, nullptr );
399+
400+ errStackTrace.append (msgStr);
401+
402+ env.ReleaseStringUTFChars (msg, msgStr);
403+
404+ return errStackTrace;
405+ }
406+
384407jclass NativeScriptException::RUNTIME_CLASS = nullptr ;
385408jclass NativeScriptException::THROWABLE_CLASS = nullptr ;
386409jclass NativeScriptException::NATIVESCRIPTEXCEPTION_CLASS = nullptr ;
387410jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_JSVALUE_CTOR_ID = nullptr ;
388411jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_THROWABLE_CTOR_ID = nullptr ;
412+ jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_GET_MESSAGE_METHOD_ID = nullptr ;
389413jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID = nullptr ;
0 commit comments