Browse Source

Handling of CurrentThread and CurrentFunction changed

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@201 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 21 years ago
parent
commit
b1610ce327
  1. 9
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
  2. 7
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs
  3. 31
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  4. 3
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/DebuggerEvents/PausedReason.cs
  5. 8
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs
  6. 10
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs
  7. 14
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs
  8. 27
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

9
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs

@ -87,8 +87,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void CallStackListItemActivate(object sender, EventArgs e) void CallStackListItemActivate(object sender, EventArgs e)
{ {
debugger.selectedFunction = (Function)(callStackList.SelectedItems[0].Tag); if (!debuggerCore.IsProcessRunning) {
debugger.JumpToCurrentLine(); debuggerCore.CurrentThread.CurrentFunction = (Function)(callStackList.SelectedItems[0].Tag);
}
} }
public void DebuggerStateChanged(object sender, DebuggerEventArgs e) public void DebuggerStateChanged(object sender, DebuggerEventArgs e)
@ -100,8 +101,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{ {
callStackList.BeginUpdate(); callStackList.BeginUpdate();
callStackList.Items.Clear(); callStackList.Items.Clear();
if (debugger.IsProcessRunning == false && debugger.selectedThread != null) { if (debugger.IsProcessRunning == false && debuggerCore.CurrentThread != null) {
foreach (Function f in debugger.selectedThread.Callstack) { foreach (Function f in debuggerCore.CurrentThread.Callstack) {
ListViewItem item = new ListViewItem(new string[] { f.Name, "" }); ListViewItem item = new ListViewItem(new string[] { f.Name, "" });
item.Tag = f; item.Tag = f;
item.ForeColor = f.Module.SymbolsLoaded ? Color.Black : Color.Gray; item.ForeColor = f.Module.SymbolsLoaded ? Color.Black : Color.Gray;

7
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs

@ -98,10 +98,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void RunningThreadsListItemActivate(object sender, EventArgs e) void RunningThreadsListItemActivate(object sender, EventArgs e)
{ {
debugger.SelectThread((Thread)(runningThreadsList.SelectedItems[0].Tag)); if (!debugger.IsProcessRunning) {
debugger.JumpToCurrentLine(); debuggerCore.CurrentThread = (Thread)(runningThreadsList.SelectedItems[0].Tag);
CallStackPad callStackPad = (CallStackPad)WorkbenchSingleton.Workbench.GetPad(typeof(CallStackPad)).PadContent; }
callStackPad.RefreshList();
} }

31
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs

@ -115,8 +115,6 @@ namespace ICSharpCode.SharpDevelop.Services
MessageViewCategory messageViewCategoryDebug; MessageViewCategory messageViewCategoryDebug;
MessageViewCategory messageViewCategoryDebuggerLog; MessageViewCategory messageViewCategoryDebuggerLog;
public Thread selectedThread;
public Function selectedFunction;
public bool ServiceInitialized { public bool ServiceInitialized {
get { get {
@ -381,16 +379,11 @@ namespace ICSharpCode.SharpDevelop.Services
} }
} }
try {
SelectThread(debugger.CurrentThread);
} catch (CurrentThreadNotAviableException) {}
JumpToCurrentLine(); JumpToCurrentLine();
} }
void DebuggingResumed(object sender, DebuggerEventArgs e) void DebuggingResumed(object sender, DebuggerEventArgs e)
{ {
selectedThread = null;
selectedFunction = null;
DebuggerService.RemoveCurrentLineMarker(); DebuggerService.RemoveCurrentLineMarker();
} }
@ -399,34 +392,12 @@ namespace ICSharpCode.SharpDevelop.Services
exceptionHistory.Clear(); exceptionHistory.Clear();
//DebuggerService.Stop();//TODO: delete //DebuggerService.Stop();//TODO: delete
} }
public void SelectThread(Thread thread)
{
selectedThread = thread;
try {
selectedFunction = thread.CurrentFunction;
// Prefer first function on callstack that has symbols (source code)
if (selectedFunction.Module.SymbolsLoaded == false) {
foreach (Function f in thread.Callstack) {
if (f.Module.SymbolsLoaded) {
selectedFunction = f;
break;
}
}
}
} catch (CurrentFunctionNotAviableException) {}
}
public void JumpToCurrentLine() public void JumpToCurrentLine()
{ {
//StatusBarService.SetMessage("Source code not aviable!"); //StatusBarService.SetMessage("Source code not aviable!");
try { try {
if (selectedFunction == null) { SourcecodeSegment nextStatement = debugger.NextStatement;
return;
}
SourcecodeSegment nextStatement = selectedFunction.NextStatement;
DebuggerService.JumpToCurrentLine(nextStatement.SourceFullFilename, nextStatement.StartLine, nextStatement.StartColumn, nextStatement.EndLine, nextStatement.EndColumn); DebuggerService.JumpToCurrentLine(nextStatement.SourceFullFilename, nextStatement.StartLine, nextStatement.StartColumn, nextStatement.EndLine, nextStatement.EndColumn);
string stepRanges = ""; string stepRanges = "";

3
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/DebuggerEvents/PausedReason.cs

@ -13,6 +13,7 @@ namespace DebuggerLibrary
Exception, Exception,
DebuggerError, DebuggerError,
EvalComplete, EvalComplete,
CurrentThreadChanged CurrentThreadChanged,
CurrentFunctionChanged
} }
} }

8
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs

@ -56,6 +56,7 @@ namespace DebuggerLibrary
void ExitCallback_Paused(PausedReason reason) void ExitCallback_Paused(PausedReason reason)
{ {
debugger.CurrentThread.CurrentFunction = debugger.CurrentThread.LastFunctionWithLoadedSymbols;
if (reason != PausedReason.EvalComplete) { if (reason != PausedReason.EvalComplete) {
debugger.OnDebuggingPaused(reason); debugger.OnDebuggingPaused(reason);
debugger.OnIsProcessRunningChanged(); debugger.OnIsProcessRunningChanged();
@ -256,10 +257,6 @@ namespace DebuggerLibrary
debugger.AddThread(pThread); debugger.AddThread(pThread);
if (debugger.MainThread == null) {
debugger.MainThread = debugger.GetThread(pThread);
}
ExitCallback_Continue(pAppDomain); ExitCallback_Continue(pAppDomain);
} }
@ -306,9 +303,6 @@ namespace DebuggerLibrary
if (debugger.CurrentThread == thread) if (debugger.CurrentThread == thread)
debugger.CurrentThread = null; debugger.CurrentThread = null;
if (debugger.MainThread == thread)
debugger.MainThread = null;
debugger.RemoveThread(thread); debugger.RemoveThread(thread);
ExitCallback_Continue(pAppDomain); ExitCallback_Continue(pAppDomain);

10
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs

@ -328,16 +328,6 @@ namespace DebuggerLibrary
} }
} }
public Thread MainThread {
get {
if (!IsDebugging) return null;
return CurrentProcess.MainThread;
}
set {
CurrentProcess.MainThread = value;
}
}
public SourcecodeSegment NextStatement { public SourcecodeSegment NextStatement {
get { get {
if (!IsDebugging) return null; if (!IsDebugging) return null;

14
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs

@ -18,7 +18,6 @@ namespace DebuggerLibrary
ICorDebugProcess corProcess; ICorDebugProcess corProcess;
Thread mainThread;
Thread currentThread; Thread currentThread;
bool isProcessRunning; bool isProcessRunning;
@ -38,28 +37,15 @@ namespace DebuggerLibrary
get { get {
if (IsProcessRunning) throw new CurrentThreadNotAviableException(); if (IsProcessRunning) throw new CurrentThreadNotAviableException();
if (currentThread != null) return currentThread; if (currentThread != null) return currentThread;
if (mainThread != null) return mainThread;
throw new CurrentThreadNotAviableException(); throw new CurrentThreadNotAviableException();
} }
set { set {
currentThread = value; currentThread = value;
if (mainThread == null) {
mainThread = value;
}
if (debugger.ManagedCallback.HandlingCallback == false) { if (debugger.ManagedCallback.HandlingCallback == false) {
debugger.OnDebuggingPaused(PausedReason.CurrentThreadChanged); debugger.OnDebuggingPaused(PausedReason.CurrentThreadChanged);
} }
} }
} }
public Thread MainThread {
get {
return mainThread;
}
set {
mainThread = value;
}
}
static public Process CreateProcess(NDebugger debugger, string filename, string workingDirectory, string arguments) static public Process CreateProcess(NDebugger debugger, string filename, string workingDirectory, string arguments)
{ {

27
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

@ -26,6 +26,8 @@ namespace DebuggerLibrary
string lastName = string.Empty; string lastName = string.Empty;
bool hasBeenLoaded = false; bool hasBeenLoaded = false;
Function currentFunction;
internal bool HasBeenLoaded { internal bool HasBeenLoaded {
get { get {
return hasBeenLoaded; return hasBeenLoaded;
@ -181,17 +183,24 @@ namespace DebuggerLibrary
public Function CurrentFunction { public Function CurrentFunction {
get { get {
if (debugger.IsProcessRunning) throw new CurrentFunctionNotAviableException(); if (debugger.IsProcessRunning) throw new CurrentFunctionNotAviableException();
ICorDebugFrame corFrame; return currentFunction;
corThread.GetActiveFrame(out corFrame); }
if (corFrame == null) { set {
List<Function> callstack = Callstack; currentFunction = value;
if (callstack.Count > 0) { if (debugger.ManagedCallback.HandlingCallback == false) {
return callstack[0]; debugger.OnDebuggingPaused(PausedReason.CurrentFunctionChanged);
} else { }
throw new CurrentFunctionNotAviableException(); }
}
public Function LastFunctionWithLoadedSymbols {
get {
foreach (Function function in Callstack) {
if (function.Module.SymbolsLoaded) {
return function;
} }
} }
return new Function(debugger, corFrame); return null;
} }
} }
} }

Loading…
Cancel
Save