From 0464248d50145b660111f9f87b91658248e7fc37 Mon Sep 17 00:00:00 2001 From: Gani Nazirov Date: Wed, 15 Apr 2020 12:37:27 -0700 Subject: [PATCH 1/2] Add exception stack to the error message --- src/DotNetBridge/Bridge.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DotNetBridge/Bridge.cs b/src/DotNetBridge/Bridge.cs index a7954355..e6c2e4d3 100644 --- a/src/DotNetBridge/Bridge.cs +++ b/src/DotNetBridge/Bridge.cs @@ -372,7 +372,8 @@ private static unsafe int GenericExec(EnvironmentBlock* penv, sbyte* psz, int cd var ex = e; while (ex.InnerException != null) ex = ex.InnerException; - ch.Error("*** {1}: '{0}'", ex.Message, ex.GetType()); + // Add StackTrace + ch.Error("*** {0}: '{1}' StackTrace: {2}", ex.GetType(), ex.Message, ex.StackTrace); return -1; } finally From 92a532cb640a7a0e6810fa01575a39c1824d7e0e Mon Sep 17 00:00:00 2001 From: Gani Nazirov Date: Mon, 20 Apr 2020 17:14:48 -0700 Subject: [PATCH 2/2] Add callstack field --- .../nimbusml/internal/utils/entrypoints.py | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/python/nimbusml/internal/utils/entrypoints.py b/src/python/nimbusml/internal/utils/entrypoints.py index 0e06ff15..9c8214b0 100644 --- a/src/python/nimbusml/internal/utils/entrypoints.py +++ b/src/python/nimbusml/internal/utils/entrypoints.py @@ -266,6 +266,14 @@ def nimbusml_runnable_graph(self): '"nodes"', '"Nodes"') + def _parse_bridge_runtime_exception(self, exception_message): + r = exception_message.split("StackTrace: ", 1) + msg = r[0] + callstack = None + if len(r) > 1: + callstack = r[1] + return msg, callstack + def _try_call_bridge( self, px_call, @@ -277,6 +285,7 @@ def _try_call_bridge( try: ret = px_call(call_parameters) except RuntimeError as e: + msg, callstack = self._parse_bridge_runtime_exception(str(e)) if verbose: vars = '?' if "data" in call_parameters: @@ -294,16 +303,14 @@ def _try_call_bridge( vars = "type={0} keys={1}".format( type(od), ','.join(od)) if isinstance(verbose, six.integer_types) and verbose >= 2: - raise BridgeRuntimeError( - "{0}.\n--GRAPH--\n{1}\n--DATA--\n{2}" - "\n--\nconcatenated={3}".format( - str(e), str(self), vars, concatenated), - model=output_modelfilename) + raise BridgeRuntimeError(msg, callstack=callstack, graph=str(self), vars=vars, + concatenated=concatenated, + model=output_modelfilename) else: - raise BridgeRuntimeError( - str(e), model=output_modelfilename) + raise BridgeRuntimeError(msg=msg, callstack=callstack, + model=output_modelfilename) else: - raise e + raise BridgeRuntimeError(msg=msg, callstack=callstack) return ret def _get_separator(self):