Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main/build/MacOSX/monostub.mm6
-rw-r--r--main/src/addins/MacPlatform/MacPlatform.cs12
-rw-r--r--main/tests/MacPlatform.Tests/MacPlatformTest.cs6
3 files changed, 21 insertions, 3 deletions
diff --git a/main/build/MacOSX/monostub.mm b/main/build/MacOSX/monostub.mm
index bab07f5967..57424d4ef3 100644
--- a/main/build/MacOSX/monostub.mm
+++ b/main/build/MacOSX/monostub.mm
@@ -227,6 +227,12 @@ load_xammac()
XAMARIN_CREATE_CLASSES ();
}
+ void *ptr = dlsym(libxammac, "xamarin_marshal_objectivec_exception_mode");
+ *(int*)ptr = 2; // MarshalObjectiveCExceptionModeThrowManagedException
+
+ ptr = dlsym(libxammac, "xamarin_marshal_managed_exception_mode");
+ *(int*)ptr = 2; // MarshalManagedExceptionModeThrowObjectiveCException
+
return libxammac;
}
diff --git a/main/src/addins/MacPlatform/MacPlatform.cs b/main/src/addins/MacPlatform/MacPlatform.cs
index 0f79d87179..989ad03ff5 100644
--- a/main/src/addins/MacPlatform/MacPlatform.cs
+++ b/main/src/addins/MacPlatform/MacPlatform.cs
@@ -287,6 +287,18 @@ namespace MonoDevelop.MacIntegration
{
oldHandler = NSGetUncaughtExceptionHandler ();
NSSetUncaughtExceptionHandler (uncaughtHandler);
+
+ ObjCRuntime.Runtime.MarshalManagedException += (sender, args) => {
+ LoggingService.LogInternalError (args.Exception);
+ };
+
+ ObjCRuntime.Runtime.MarshalObjectiveCException += (sender, args) => {
+ try {
+ throw new MarshalledObjCException (args.Exception);
+ } catch (MarshalledObjCException e) {
+ LoggingService.LogInternalError ("MarshalObjCException", e);
+ }
+ };
}
public override Xwt.Toolkit LoadNativeToolkit ()
diff --git a/main/tests/MacPlatform.Tests/MacPlatformTest.cs b/main/tests/MacPlatform.Tests/MacPlatformTest.cs
index e5a415f5af..4e06e884c7 100644
--- a/main/tests/MacPlatform.Tests/MacPlatformTest.cs
+++ b/main/tests/MacPlatform.Tests/MacPlatformTest.cs
@@ -181,7 +181,7 @@ namespace MacPlatform.Tests
public void CriticalErrorsExceptionsHaveFullStacktracesInLog ()
{
var logger = new CapturingLogger {
- EnabledLevel = EnabledLoggingLevel.Fatal,
+ EnabledLevel = EnabledLoggingLevel.Error,
};
try {
@@ -192,7 +192,7 @@ namespace MacPlatform.Tests
Assert.Throws<ObjCException> (() => void_objc_msgSend (ex.Handle, selector));
- var (_, message) = logger.LogMessages.Single (x => x.Level == LogLevel.Fatal);
+ var (_, message) = logger.LogMessages.Single (x => x.Level == LogLevel.Error);
AssertMacPlatformStacktrace (message);
} finally {
LoggingService.RemoveLogger (logger.Name);
@@ -203,7 +203,7 @@ namespace MacPlatform.Tests
{
Assert.That (stacktrace, Contains.Substring ("at MonoDevelopProcessHost.Main"));
Assert.That (stacktrace, Contains.Substring ("at MacPlatform.Tests.MacPlatformTest.void_objc_msgSend"));
- Assert.That (stacktrace, Contains.Substring ("at MonoDevelop.MacIntegration.MacPlatformService.HandleUncaughtException"));
+ Assert.That (stacktrace, Contains.Substring ("at MonoDevelop.MacIntegration.MacPlatformService+MarshalledObjCException..ctor"));
}