[Mono-devel-list] mono debugger in infinite loop
Philip Nelson
panmanphil at yahoo.com
Sun Mar 23 14:08:39 EST 2003
One side note before digging in, thanks a lot for this monumental effort.
Also, the dialog handling to load a new program needs a little work. If you
click the Browse button, the new dialog is locked, unless you kill the initial
dialog. Then you can choose a file and say OK, but nothing happens. Open the
choose dialog again, the file selected is there and can be loaded.
Also I hadn't noticed the step over vs step command, but the results were the
same. It would make sense perhaps if I tried to step into a method for which
there were no symbols, but alas, that wasn't the problem.
> > So, with great anticipation ...
> >
> > mono /usr/bin/Debugger.exe NAnt.exe -help
>
> Did you compile NAnt with debugging support ?
Yes
>
> I compiled mine with
>
> $ cd ~/monocvs/mcs/nant/
> $ mcs -g /out:NAnt.exe /recurse:*.cs
>
> > blew up somewhere deep in gtk-sharp (?) with a null reference exception
>
> Can you please post the full backtrace ?
Filename: /home/panmanphil/nant/src/NAnt.Console/ConsoleStub.cs
Unhandled Exception: System.NullReferenceException: A null value was found
where an object instance was required
in <0x00020> 00 Gtk.TextBuffer:MoveMark (Gtk.TextMark,Gtk.TextIter)
in <0x00290> 00 Mono.Debugger.GUI.SourceView:frame_changed_event
(Mono.Debugger.StackFrame)
in <0x0002a> 00 Mono.Debugger.GUI.SourceView:SetActive ()
in <0x00011> 00 Mono.Debugger.GUI.DisassemblerView:SetActive ()
in <0x0005d> 00 Mono.Debugger.GUI.SourceView:set_Active (bool)
in <0x00147> 00 Mono.Debugger.GUI.SourceManager:MethodChanged
(Mono.Debugger.IMethod,Mono.Debugger.IMethodSource)
in <0x000d8> 00 Mono.Debugger.GUI.SourceManager:FrameChanged
(Mono.Debugger.StackFrame)
in <0x0003f> 00 Mono.Debugger.GUI.DebuggerWidget:frame_event ()
in <0x0005b> 01 System.MulticastDelegate:invoke_void ()
in <0x000a7> 00 Mono.Debugger.ThreadNotify:read_data_handler (int)
in <0x00061> 01 System.MulticastDelegate:invoke_void_int (int)
in <0x00041> 00 Mono.Debugger.IOInputChannel:read_data (int)
in <0x00030> 05 Mono.Debugger.IOInputChannel:read_data (int)
in (unmanaged) 06
Mono.Debugger.Frontends.CommandLine.ProcessHandle:g_main_context_iteration
(intptr,bool)
in <0x00004> 06
Mono.Debugger.Frontends.CommandLine.ProcessHandle:g_main_context_iteration
(intptr,bool)
in <0x0001b> 00
Mono.Debugger.Frontends.CommandLine.ProcessHandle:process_events ()
in <0x002a5> 00 Mono.Debugger.Frontends.CommandLine.ProcessHandle:.ctor
(Mono.Debugger.Frontends.CommandLine.ScriptingContext,Mono.Debugger.DebuggerBackend,Mono.Debugger.Process,int)
in <0x000ab> 00 Mono.Debugger.Frontends.CommandLine.ScriptingContext:Run ()
in <0x0025e> 00 Mono.Debugger.GUI.DebuggerGUI:LoadProgram (string[])
in <0x00213> 00 Mono.Debugger.GUI.DebuggerGUI:.ctor (string[])
in <0x00276> 00 Mono.Debugger.GUI.DebuggerGUI:Main (string[])
>
> > Ok. mono /usr/bin/Debugger.exe
> > load program and viola, the debugger shows a yellow highlight on the first
> line
> > of source.
>
> Ok, I suppose that's also NAnt.exe and it stopped in NAnt.cs, line 98 (on the
> `if (!project.Run ())` statement), that's what it does for me.
>
> > Step, Step, and then step into the first reference to a system
> > type, AppDomain in this case, never to return. I could break, but have to
> > close the session after that.
>
> Which method in AppDomain do you mean and did you compile your corlib with
> debugging
> support ?
I have the rpm version of corlib.
AppDomain cd = AppDomain.CurrentDomain;
Appdomain executionAD = cd; //this line never returns.
>
> > Ok, try the same thing from the command line. I can step and again it goes
> > into a loop of some sort when hitting the AppDomain reference.
> >
> > OK, try something simpler, a 10 line program that loads up a DataSet,
> builds a
> > DataTable in memory and calls WriteXml() to save. This was a simple test
> that
> > already worked (except for writexml not being implemented). In this case I
> > could step a few steps until I called a method on the dataset and then an
> > infinite loop.
>
> Please send me this small test program so I can have a look at it myself.
> Which method
> did you attempt to call where it crashed ?
It crashes in various places. Today I made it through to the return statement
with the step over (F9). Second pass it locked on the line:
System.Data.DataSet test = new System.Data.DataSet("test");
Third time, after killing some zombie debugger and mono processes, on the call
to Console.WriteLn()
EXCEPTION: Mono.Debugger.InternalError: Call not completed
in <0x00087> 00 Mono.Debugger.Backends.PTraceInferior:WaitForCallback ()
in <0x000c2> 00 Mono.Debugger.Backends.PTraceInferior:CallMethod
(Mono.Debugger.TargetAddress,long)
in <0x0017f> 00
Mono.Debugger.Languages.CSharp.MonoCSharpLanguageBackend:GetTrampoline
(Mono.Debugger.Backends.IInferior,Mono.Debugger.TargetAddress)
in <0x00209> 00 Mono.Debugger.Backends.SingleSteppingEngine:Step
(Mono.Debugger.Backends.StepFrame)
in <0x001b3> 00 Mono.Debugger.Backends.SingleSteppingEngine:process_command
(Command)
in <0x0002b> 00 Mono.Debugger.Backends.SingleSteppingEngine:engine_thread_main
(Command)
4th time it locked on the tb.Rows.Add call
using System.Data;
using System;
namespace WINN
{
public class Test
{
public Test()
{
//food
// System.Console.Out.Println("hello worlds");
}
public static int Main(string[] args)
{
Console.WriteLine("Hello World");
System.Data.DataSet test = new System.Data.DataSet("test");
test.Tables.Add("newTable");
System.Data.DataTable tb = test.Tables[0];
tb.Columns.Add("foo", Type.GetType("System.String"));
tb.Columns.Add("bar",Type.GetType("System.String"));
object[] ogs = new Object[]{"one", "two"};
tb.Rows.Add(ogs);
Console.WriteLine("Count of Tables is: " + test.Tables.Count);
test.AcceptChanges();
Console.WriteLine("Count of rows is " + test.Tables[0].Rows.Count);
test.WriteXml("foo.xml");
return 0;
}
}
}
More information about the Mono-devel-list
mailing list