diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs index dd9b0ccef7..755ce75fa4 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs @@ -607,7 +607,13 @@ namespace ICSharpCode.SharpDevelop.Services // Need to intercept now so that we can evaluate properties if (e.Process.SelectedThread.InterceptCurrentException()) { msg.AppendLine(e.Exception.ToString()); - msg.Append(e.Exception.GetStackTrace(StringParser.Parse("${res:MainWindow.Windows.Debug.ExceptionForm.LineFormat.EndOfInnerException}"))); + string stackTrace; + try { + stackTrace = e.Exception.GetStackTrace(StringParser.Parse("${res:MainWindow.Windows.Debug.ExceptionForm.LineFormat.EndOfInnerException}")); + } catch (GetValueException) { + stackTrace = e.Process.SelectedThread.GetStackTrace(StringParser.Parse("${res:MainWindow.Windows.Debug.ExceptionForm.LineFormat.Symbols}"), StringParser.Parse("${res:MainWindow.Windows.Debug.ExceptionForm.LineFormat.NoSymbols}")); + } + msg.Append(stackTrace); } else { // For example, happens on stack overflow msg.AppendLine(StringParser.Parse("${res:MainWindow.Windows.Debug.ExceptionForm.Error.CannotInterceptException}")); diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Exception.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Exception.cs index 6857646bee..96a4f9e1fa 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Exception.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Exception.cs @@ -79,6 +79,9 @@ namespace Debugger return GetStackTrace("--- End of inner exception stack trace ---"); } + /// Returs formated stacktrace for the exception + /// Getting the stacktrace involves property + /// evaluation so GetValueException can be thrown in some cicumstances. public string GetStackTrace(string endOfInnerExceptionFormat) { StringBuilder sb = new StringBuilder();