[Mono-bugs] [Bug 78586][Wis] New - Wrong line numbers in stack
traces
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Mon Jun 5 16:06:59 EDT 2006
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by rodrigobamboo at gmail.com.
http://bugzilla.ximian.com/show_bug.cgi?id=78586
--- shadow/78586 2006-06-05 16:06:59.000000000 -0400
+++ shadow/78586.tmp.14770 2006-06-05 16:06:59.000000000 -0400
@@ -0,0 +1,94 @@
+Bug#: 78586
+Product: Mono: Runtime
+Version: 1.1
+OS:
+OS Details: Windows XP
+Status: NEW
+Resolution:
+Severity:
+Priority: Wishlist
+Component: debug
+AssignedTo: martin at ximian.com
+ReportedBy: rodrigobamboo at gmail.com
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: Wrong line numbers in stack traces
+
+using System;
+using System.IO;
+using System.Reflection.Emit;
+using System.Reflection;
+using System.Diagnostics.SymbolStore;
+
+namespace BugReport
+{
+ public interface IFoo
+ {
+ void Bar();
+ }
+
+ class Program
+ {
+ const string DocumentPath = "/temp/test.cs";
+
+ static void Main(string[] args)
+ {
+ IFoo foo = EmitFoo();
+ try
+ {
+ foo.Bar();
+ }
+ catch (Exception x)
+ {
+ //Console.WriteLine(x);
+ Assert(x.StackTrace.IndexOf(DocumentPath + ":10") != -1);
+ }
+ }
+
+ static void Assert(bool condition)
+ {
+ if (!condition) throw new ApplicationException();
+ }
+
+ static IFoo EmitFoo()
+ {
+ AppDomain currentDomain = AppDomain.CurrentDomain;
+ string fname = Path.Combine(currentDomain.BaseDirectory,
+"bugged.dll");
+
+ AssemblyName name = new AssemblyName();
+ name.Name = Path.GetFileNameWithoutExtension(fname);
+
+ AssemblyBuilder builder =
+currentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save,
+Path.GetDirectoryName(fname), null);
+ ModuleBuilder module =
+builder.DefineDynamicModule(Path.GetFileName(fname), true);
+ ISymbolDocumentWriter document =
+module.DefineDocument(DocumentPath, SymDocumentType.Text,
+SymLanguageType.CSharp, Guid.Empty);
+
+ TypeBuilder foo = module.DefineType("Foo",
+TypeAttributes.Public | TypeAttributes.Class, typeof(object));
+ foo.AddInterfaceImplementation(typeof(IFoo));
+
+ MethodBuilder bar = foo.DefineMethod("Bar",
+MethodAttributes.Public | MethodAttributes.Virtual, typeof(void), new Type[0]);
+ ILGenerator il = bar.GetILGenerator();
+ il.MarkSequencePoint(document, 10, 0, 11, 0);
+ il.ThrowException(typeof(ApplicationException));
+ // MONO uses the next sequence point as the line number for the
+ // exception above, it should use the previous one
+ il.MarkSequencePoint(document, 11, 0, 12, 0);
+ il.Emit(OpCodes.Ret);
+
+ foo.CreateType();
+
+ builder.Save(Path.GetFileName(fname));
+ return
+(IFoo)Activator.CreateInstance(Assembly.LoadFrom(fname).GetType("Foo"));
+ }
+ }
+}
More information about the mono-bugs
mailing list