Browse Source

when setting a BP before attaching, make sure to set it in a module.

pull/191/merge
Eusebiu Marcu 15 years ago
parent
commit
699d074956
  1. 14
      Debugger/Debugger.Core/Breakpoint.cs
  2. 5
      Debugger/Debugger.Core/Process.cs
  3. 6
      Debugger/ILSpy.Debugger/Services/Debugger/DebuggerService.cs
  4. 19
      Debugger/ILSpy.Debugger/Services/Debugger/WindowsDebugger.cs
  5. 34
      ILSpy/MainWindow.xaml.cs

14
Debugger/Debugger.Core/Breakpoint.cs

@ -45,6 +45,11 @@ namespace Debugger @@ -45,6 +45,11 @@ namespace Debugger
set { line = value; }
}
public string TypeName {
get;
set;
}
public int Column {
get { return column; }
protected set { column = value; }
@ -142,7 +147,7 @@ namespace Debugger @@ -142,7 +147,7 @@ namespace Debugger
corBreakpoints.Clear();
}
internal virtual bool SetBreakpoint(Module module)
public virtual bool SetBreakpoint(Module module)
{
if (this.fileName == null)
return false;
@ -171,12 +176,13 @@ namespace Debugger @@ -171,12 +176,13 @@ namespace Debugger
public class ILBreakpoint : Breakpoint
{
public ILBreakpoint(NDebugger debugger, int line, uint metadataToken, int ilOffset, bool enabled)
public ILBreakpoint(NDebugger debugger, string typeName, int line, uint metadataToken, int offset, bool enabled)
{
this.Debugger = debugger;
this.Line = line;
this.TypeName = typeName;
this.MetadataToken = metadataToken;
this.ILOffset = ilOffset;
this.ILOffset = offset;
this.Enabled = enabled;
}
@ -184,7 +190,7 @@ namespace Debugger @@ -184,7 +190,7 @@ namespace Debugger
public int ILOffset { get; private set; }
internal override bool SetBreakpoint(Module module)
public override bool SetBreakpoint(Module module)
{
SourcecodeSegment segment = SourcecodeSegment.CreateForIL(module, this.Line, (int)MetadataToken, ILOffset);
if (segment == null)

5
Debugger/Debugger.Core/Process.cs

@ -687,8 +687,13 @@ namespace Debugger @@ -687,8 +687,13 @@ namespace Debugger
}
BreakAtBeginning = false;
}
if (ModulesAdded != null)
ModulesAdded(this, new ModuleEventArgs(e.Item));
}
#endregion
public event EventHandler<ModuleEventArgs> ModulesAdded;
}
}

6
Debugger/ILSpy.Debugger/Services/Debugger/DebuggerService.cs

@ -203,7 +203,7 @@ namespace ILSpy.Debugger.Services @@ -203,7 +203,7 @@ namespace ILSpy.Debugger.Services
var logicPos = e.LogicalPosition;
var doc = (TextDocument)e.Editor.Document;
string variable =
string variable =
ParserService.SimpleParseAt(doc.Text, doc.GetOffset(new TextLocation(logicPos.Line, logicPos.Column)));
if (currentDebugger == null || !currentDebugger.IsDebugging || !currentDebugger.CanEvaluate) {
@ -218,12 +218,12 @@ namespace ILSpy.Debugger.Services @@ -218,12 +218,12 @@ namespace ILSpy.Debugger.Services
}
// FIXME Do proper parsing
//
//
// using (var sr = new StringReader(doc.Text))
// {
// var parser = new CSharpParser();
// parser.Parse(sr);
//
//
// IExpressionFinder expressionFinder = ParserService.GetExpressionFinder();
// if (expressionFinder == null)
// return;

19
Debugger/ILSpy.Debugger/Services/Debugger/WindowsDebugger.cs

@ -572,18 +572,18 @@ namespace ILSpy.Debugger.Services @@ -572,18 +572,18 @@ namespace ILSpy.Debugger.Services
if (map != null) {
breakpoint = new ILBreakpoint(
debugger,
bookmark.TypeName,
bookmark.LineNumber,
token,
map.ILInstructionOffset.From,
bookmark.IsEnabled);
debugger.Breakpoints.Add(breakpoint);
}
}
if (breakpoint == null)
return;
debugger.Breakpoints.Add(breakpoint);
// Action setBookmarkColor = delegate {
// if (debugger.Processes.Count == 0) {
// bookmark.IsHealthy = true;
@ -728,12 +728,14 @@ namespace ILSpy.Debugger.Services @@ -728,12 +728,14 @@ namespace ILSpy.Debugger.Services
debuggedProcess.Paused -= debuggedProcess_DebuggingPaused;
debuggedProcess.ExceptionThrown -= debuggedProcess_ExceptionThrown;
debuggedProcess.Resumed -= debuggedProcess_DebuggingResumed;
debuggedProcess.ModulesAdded -= debuggedProcess_ModulesAdded;
}
debuggedProcess = process;
if (debuggedProcess != null) {
debuggedProcess.Paused += debuggedProcess_DebuggingPaused;
debuggedProcess.ExceptionThrown += debuggedProcess_ExceptionThrown;
debuggedProcess.Resumed += debuggedProcess_DebuggingResumed;
debuggedProcess.ModulesAdded += debuggedProcess_ModulesAdded;
debuggedProcess.BreakAtBeginning = BreakAtBeginning;
}
@ -743,6 +745,19 @@ namespace ILSpy.Debugger.Services @@ -743,6 +745,19 @@ namespace ILSpy.Debugger.Services
JumpToCurrentLine();
OnProcessSelected(new ProcessEventArgs(process));
}
void debuggedProcess_ModulesAdded(object sender, ModuleEventArgs e)
{
foreach (var bookmark in DebuggerService.Breakpoints) {
var breakpoint =
debugger.Breakpoints.FirstOrDefault(
b => b.Line == bookmark.LineNumber && b.TypeName == bookmark.TypeName);
if (breakpoint == null)
continue;
breakpoint.SetBreakpoint(e.Module);
}
}
void debuggedProcess_DebuggingPaused(object sender, ProcessEventArgs e)
{

34
ILSpy/MainWindow.xaml.cs

@ -337,17 +337,23 @@ namespace ICSharpCode.ILSpy @@ -337,17 +337,23 @@ namespace ICSharpCode.ILSpy
#endregion
#region Debugger commands
IDebugger CurrentDebugger {
get {
return DebuggerService.CurrentDebugger;
}
}
void AttachToProcessExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (!DebuggerService.CurrentDebugger.IsDebugging) {
if (!CurrentDebugger.IsDebugging) {
var window = new AttachToProcessWindow();
window.Owner = this;
if (window.ShowDialog() == true)
{
if (DebuggerService.CurrentDebugger.IsDebugging) {
if (CurrentDebugger.IsDebugging) {
EnableDebuggerUI(false);
DebuggerService.CurrentDebugger.DebugStopped += OnDebugStopped;
CurrentDebugger.DebugStopped += OnDebugStopped;
}
}
}
@ -361,36 +367,36 @@ namespace ICSharpCode.ILSpy @@ -361,36 +367,36 @@ namespace ICSharpCode.ILSpy
void DetachFromProcessExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (DebuggerService.CurrentDebugger.IsDebugging && !DebuggerService.CurrentDebugger.IsProcessRunning){
DebuggerService.CurrentDebugger.Detach();
if (CurrentDebugger.IsDebugging){
CurrentDebugger.Detach();
EnableDebuggerUI(true);
DebuggerService.CurrentDebugger.DebugStopped -= OnDebugStopped;
CurrentDebugger.DebugStopped -= OnDebugStopped;
}
}
void ContinueDebuggingExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (DebuggerService.CurrentDebugger.IsDebugging)
DebuggerService.CurrentDebugger.Continue();
if (CurrentDebugger.IsDebugging)
CurrentDebugger.Continue();
}
void StepIntoExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (DebuggerService.CurrentDebugger.IsDebugging && !DebuggerService.CurrentDebugger.IsProcessRunning)
DebuggerService.CurrentDebugger.StepInto();
if (CurrentDebugger.IsDebugging)
CurrentDebugger.StepInto();
}
void StepOverExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (DebuggerService.CurrentDebugger.IsDebugging && !DebuggerService.CurrentDebugger.IsProcessRunning)
DebuggerService.CurrentDebugger.StepOver();
if (CurrentDebugger.IsDebugging)
CurrentDebugger.StepOver();
}
void StepOutExecuted(object sender, ExecutedRoutedEventArgs e)
{
if (DebuggerService.CurrentDebugger.IsDebugging && !DebuggerService.CurrentDebugger.IsProcessRunning)
DebuggerService.CurrentDebugger.StepOut();
if (CurrentDebugger.IsDebugging)
CurrentDebugger.StepOut();
}
void RemoveAllBreakpointExecuted(object sender, ExecutedRoutedEventArgs e)

Loading…
Cancel
Save