Browse Source

Fixed setting of breakpoints for multiple appdomains

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1639 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 19 years ago
parent
commit
d052929219
  1. 8
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/Breakpoint.cs
  2. 6
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/NDebugger-Breakpoints.cs
  3. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs
  4. 35
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/SourcecodeSegment.cs

8
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/Breakpoint.cs

@ -104,15 +104,11 @@ namespace Debugger
HadBeenSet = false; HadBeenSet = false;
} }
public bool SetBreakpoint() public bool SetBreakpoint(Module module)
{ {
if (hadBeenSet) {
return true;
}
ICorDebugFunction corFunction; ICorDebugFunction corFunction;
int ilOffset; int ilOffset;
if (!sourcecodeSegment.GetFunctionAndOffset(debugger, false, out corFunction, out ilOffset)) { if (!sourcecodeSegment.GetFunctionAndOffset(module, false, out corFunction, out ilOffset)) {
return false; return false;
} }

6
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Breakpoints/NDebugger-Breakpoints.cs

@ -71,7 +71,9 @@ namespace Debugger
{ {
breakpointCollection.Add(breakpoint); breakpointCollection.Add(breakpoint);
breakpoint.SetBreakpoint(); foreach(Module module in this.Modules) {
breakpoint.SetBreakpoint(module);
}
breakpoint.Changed += new EventHandler<BreakpointEventArgs>(OnBreakpointStateChanged); breakpoint.Changed += new EventHandler<BreakpointEventArgs>(OnBreakpointStateChanged);
breakpoint.Hit += new EventHandler<BreakpointEventArgs>(OnBreakpointHit); breakpoint.Hit += new EventHandler<BreakpointEventArgs>(OnBreakpointHit);
@ -123,7 +125,7 @@ namespace Debugger
collection.AddRange(breakpointCollection); collection.AddRange(breakpointCollection);
foreach (Breakpoint b in collection) { foreach (Breakpoint b in collection) {
b.SetBreakpoint(); b.SetBreakpoint(e.Module);
} }
} }
} }

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs

@ -331,7 +331,7 @@ namespace Debugger
SourcecodeSegment suggestion = new SourcecodeSegment(filename, line, column, column); SourcecodeSegment suggestion = new SourcecodeSegment(filename, line, column, column);
ICorDebugFunction corFunction; ICorDebugFunction corFunction;
int ilOffset; int ilOffset;
if (!suggestion.GetFunctionAndOffset(debugger, false, out corFunction, out ilOffset)) { if (!suggestion.GetFunctionAndOffset(this.Module, false, out corFunction, out ilOffset)) {
return null; return null;
} else { } else {
if (corFunction.Token != methodProps.Token) { if (corFunction.Token != methodProps.Token) {

35
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/SourcecodeSegment.cs

@ -153,50 +153,27 @@ namespace Debugger
} }
// Returns true if found // Returns true if found
internal bool GetFunctionAndOffset(NDebugger debugger, bool normailize, out ICorDebugFunction function, out int ilOffset) internal bool GetFunctionAndOffset(Module module, bool normailize, out ICorDebugFunction function, out int ilOffset)
{ {
function = null; function = null;
ilOffset = 0; ilOffset = 0;
Module module = null; ISymUnmanagedReader symReader = module.SymReader;
ISymUnmanagedReader symReader = null;
ISymUnmanagedDocument symDoc = null;
// Try to get doc from moduleFilename
if (moduleFilename != null) {
try {
module = debugger.GetModule(ModuleFilename);
symReader = module.SymReader;
symDoc = symReader.GetDocument(SourceFullFilename,Guid.Empty,Guid.Empty,Guid.Empty);
} catch {}
}
// search all modules
if (symDoc == null) {
foreach (Module m in debugger.Modules) {
module = m;
symReader = m.SymReader;
if (symReader == null) { if (symReader == null) {
continue; return false; // No symbols
} }
ISymUnmanagedDocument symDoc = null;
symDoc = symReader.GetDocument(SourceFullFilename, Guid.Empty, Guid.Empty, Guid.Empty); symDoc = symReader.GetDocument(SourceFullFilename, Guid.Empty, Guid.Empty, Guid.Empty);
if (symDoc != null) {
break;
}
}
}
if (symDoc == null) { if (symDoc == null) {
return false; //Not found return false; // Does not use source file
} }
uint validLine; uint validLine;
try { try {
validLine = symDoc.FindClosestLine((uint)StartLine); validLine = symDoc.FindClosestLine((uint)StartLine);
} catch { } catch {
return false; //Not found return false; // Not on a vaild point
} }
if (validLine != StartLine && normailize) { if (validLine != StartLine && normailize) {
StartLine = (int)validLine; StartLine = (int)validLine;

Loading…
Cancel
Save