зеркало из https://github.com/mono/mail-archives.git
104 строки
4.2 KiB
HTML
104 строки
4.2 KiB
HTML
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||
|
<HTML>
|
||
|
<HEAD>
|
||
|
<TITLE> [mono-android] PSA: runtime aborts without stack traces
|
||
|
</TITLE>
|
||
|
<LINK REL="Index" HREF="index.html" >
|
||
|
<LINK REL="made" HREF="mailto:monodroid%40lists.ximian.com?Subject=%5Bmono-android%5D%20PSA%3A%20runtime%20aborts%20without%20stack%20traces&In-Reply-To=">
|
||
|
<META NAME="robots" CONTENT="index,nofollow">
|
||
|
<META http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||
|
<LINK REL="Previous" HREF="008033.html">
|
||
|
<LINK REL="Next" HREF="008076.html">
|
||
|
</HEAD>
|
||
|
<BODY BGCOLOR="#ffffff">
|
||
|
<H1>[mono-android] PSA: runtime aborts without stack traces</H1>
|
||
|
<B>Jonathan Pryor</B>
|
||
|
<A HREF="mailto:monodroid%40lists.ximian.com?Subject=%5Bmono-android%5D%20PSA%3A%20runtime%20aborts%20without%20stack%20traces&In-Reply-To="
|
||
|
TITLE="[mono-android] PSA: runtime aborts without stack traces">jonp at xamarin.com
|
||
|
</A><BR>
|
||
|
<I>Thu Dec 22 11:04:18 EST 2011</I>
|
||
|
<P><UL>
|
||
|
<LI>Previous message: <A HREF="008033.html">[mono-android] Adjust Emulator's Resolution
|
||
|
</A></li>
|
||
|
<LI>Next message: <A HREF="008076.html">[mono-android] ExecutionEngineException: SIGILL
|
||
|
</A></li>
|
||
|
<LI> <B>Messages sorted by:</B>
|
||
|
<a href="date.html#8036">[ date ]</a>
|
||
|
<a href="thread.html#8036">[ thread ]</a>
|
||
|
<a href="subject.html#8036">[ subject ]</a>
|
||
|
<a href="author.html#8036">[ author ]</a>
|
||
|
</LI>
|
||
|
</UL>
|
||
|
<HR>
|
||
|
<!--beginarticle-->
|
||
|
<PRE>There have been several mentions of runtime aborts that do not contain a stack trace, e.g.
|
||
|
|
||
|
<A HREF="http://lists.ximian.com/pipermail/monodroid/2011-December/007756.html">http://lists.ximian.com/pipermail/monodroid/2011-December/007756.html</A>
|
||
|
<A HREF="http://lists.ximian.com/pipermail/monodroid/2011-December/007862.html">http://lists.ximian.com/pipermail/monodroid/2011-December/007862.html</A>
|
||
|
|
||
|
We have discovered a [0] cause: stack overflow.
|
||
|
|
||
|
Mono/ARM has no stack overflow support at the moment, so mono aborts on stack overflow. (Mono usually aborts _anyway_, but usually you'll at least get some stack trace output because of it. Mono/ARM does not. We will be improving this in a future release.)
|
||
|
|
||
|
Combined with a breaking change in Mono for Android 4.0, in which Java.Lang.Object.Dispose() was made non-virtual and a virtual Java.Lang.Object.Dispose(bool) method was added, it is now very easy to trigger stack overflow. Consider:
|
||
|
|
||
|
class Death : Java.Lang.Object {
|
||
|
protected override void Dispose (bool disposing)
|
||
|
{
|
||
|
Android.Util.Log.Info ("death", "Death.Dispose(bool)");
|
||
|
base.Dispose (); // BAD
|
||
|
}
|
||
|
}
|
||
|
|
||
|
If you create and dispose of an instance of Death:
|
||
|
|
||
|
using (var f = new Death ()) {
|
||
|
}
|
||
|
|
||
|
then your app will crash with a stack overflow, and no stack trace will be printed. (You will get a ton of "Death.Dispose(bool)" messages printed to logcat, but most Dispose() implementations won't actually log anything...hence the stacktrace-less nature of the abort.)
|
||
|
|
||
|
The solution is to review any Java.Lang.Object.Dispose(bool) overrides and ensure that IF they call base.Dispose(), they call the Dispose(bool) method, NOT Dispose():
|
||
|
|
||
|
base.Dispose(disposing); // GOOD
|
||
|
base.Dispose(); // BAD
|
||
|
|
||
|
This is in accordance with the IDisposable pattern:
|
||
|
|
||
|
<A HREF="http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx">http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx</A>
|
||
|
|
||
|
- Jon
|
||
|
|
||
|
[0] I have no idea if it's _the_ cause, but it's certainly _a_ cause. I'm always interested in further repros.
|
||
|
|
||
|
</PRE>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<!--endarticle-->
|
||
|
<HR>
|
||
|
<P><UL>
|
||
|
<!--threads-->
|
||
|
<LI>Previous message: <A HREF="008033.html">[mono-android] Adjust Emulator's Resolution
|
||
|
</A></li>
|
||
|
<LI>Next message: <A HREF="008076.html">[mono-android] ExecutionEngineException: SIGILL
|
||
|
</A></li>
|
||
|
<LI> <B>Messages sorted by:</B>
|
||
|
<a href="date.html#8036">[ date ]</a>
|
||
|
<a href="thread.html#8036">[ thread ]</a>
|
||
|
<a href="subject.html#8036">[ subject ]</a>
|
||
|
<a href="author.html#8036">[ author ]</a>
|
||
|
</LI>
|
||
|
</UL>
|
||
|
|
||
|
<hr>
|
||
|
<a href="http://lists.ximian.com/mailman/listinfo/monodroid">More information about the Monodroid
|
||
|
mailing list</a><br>
|
||
|
</body></html>
|