@@ -140,6 +140,9 @@ void NativeScriptException::Init() {
140
140
141
141
NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID = env.GetStaticMethodID (NATIVESCRIPTEXCEPTION_CLASS, " getStackTraceAsString" , " (Ljava/lang/Throwable;)Ljava/lang/String;" );
142
142
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 );
143
146
}
144
147
145
148
// ON V8 UNCAUGHT EXCEPTION
@@ -204,7 +207,8 @@ Local<Value> NativeScriptException::WrapJavaToJsException() {
204
207
205
208
Local<Value> NativeScriptException::GetJavaExceptionFromEnv (const JniLocalRef& exc, JEnv& env) {
206
209
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 ());
208
212
209
213
auto isolate = Isolate::GetCurrent ();
210
214
auto objectManager = Runtime::GetObjectManager (isolate);
@@ -223,6 +227,10 @@ Local<Value> NativeScriptException::GetJavaExceptionFromEnv(const JniLocalRef& e
223
227
auto context = isolate->GetCurrentContext ();
224
228
errObj->Set (context, V8StringConstants::GetNativeException (isolate), nativeExceptionObject);
225
229
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
+
226
234
return errObj;
227
235
}
228
236
@@ -362,15 +370,17 @@ string NativeScriptException::GetErrorStackTrace(const Local<StackTrace>& stackT
362
370
auto lineNumber = frame->GetLineNumber ();
363
371
auto column = frame->GetColumn ();
364
372
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;
366
376
}
367
377
368
378
return ss.str ();
369
379
}
370
380
371
381
string NativeScriptException::GetExceptionMessage (JEnv& env, jthrowable exception ) {
372
382
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 ));
374
384
375
385
const char * msgStr = env.GetStringUTFChars (msg, nullptr );
376
386
@@ -381,9 +391,23 @@ string NativeScriptException::GetExceptionMessage(JEnv& env, jthrowable exceptio
381
391
return errMsg;
382
392
}
383
393
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
+
384
407
jclass NativeScriptException::RUNTIME_CLASS = nullptr ;
385
408
jclass NativeScriptException::THROWABLE_CLASS = nullptr ;
386
409
jclass NativeScriptException::NATIVESCRIPTEXCEPTION_CLASS = nullptr ;
387
410
jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_JSVALUE_CTOR_ID = nullptr ;
388
411
jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_THROWABLE_CTOR_ID = nullptr ;
412
+ jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_GET_MESSAGE_METHOD_ID = nullptr ;
389
413
jmethodID NativeScriptException::NATIVESCRIPTEXCEPTION_GET_STACK_TRACE_AS_STRING_METHOD_ID = nullptr ;
0 commit comments