Browse Source

fix setting breakpoints in properties.fix UI issues; fix null reference issues.remove old code mappings (not needed anymore).

pull/263/merge
Eusebiu Marcu 14 years ago
parent
commit
489bd6fb7a
  1. 3
      Debugger/ILSpy.Debugger/Commands/BreakpointCommand.cs
  2. 1
      Debugger/ILSpy.Debugger/Commands/DebuggerCommands.cs
  3. 5
      Debugger/ILSpy.Debugger/ILSpy.Debugger.csproj
  4. 11
      Debugger/ILSpy.Debugger/Services/Debugger/WindowsDebugger.cs
  5. 52
      ILSpy.SharpDevelop.LGPL/AvalonEdit/IconBarMargin.cs
  6. 19
      ILSpy.SharpDevelop.LGPL/Bookmarks/BreakpointBookmark.cs
  7. 10
      ILSpy.SharpDevelop.LGPL/Bookmarks/CurrentLineBookmark.cs
  8. 5
      ILSpy.SharpDevelop.LGPL/DebugInformation.cs
  9. 8
      ILSpy.SharpDevelop.LGPL/ILSpy.SharpDevelop.LGPL.csproj
  10. 2
      ILSpy.SharpDevelop.LGPL/Models/ToolTipRequestEventArgs.cs
  11. 19
      ILSpy.SharpDevelop.LGPL/Services/DebuggerService.cs
  12. 0
      ILSpy.SharpDevelop.LGPL/Services/IDebugger.cs
  13. 11
      ILSpy.SharpDevelop.LGPL/Services/ParserService.cs
  14. 10
      ILSpy/App.xaml.cs
  15. 7
      ILSpy/TextView/DecompilerTextView.cs

3
Debugger/ILSpy.Debugger/Commands/BreakpointCommand.cs

@ -32,8 +32,9 @@ namespace ICSharpCode.ILSpy.Debugger.Commands @@ -32,8 +32,9 @@ namespace ICSharpCode.ILSpy.Debugger.Commands
// no bookmark on the line: create a new breakpoint
DebuggerService.ToggleBreakpointAt(
DebugInformation.DecompiledMemberReferences[key],
instruction.MemberMapping.MemberReference,
line,
token,
instruction.ILInstructionOffset,
DebugInformation.Language);
break;

1
Debugger/ILSpy.Debugger/Commands/DebuggerCommands.cs

@ -307,6 +307,7 @@ namespace ICSharpCode.ILSpy.Debugger.Commands @@ -307,6 +307,7 @@ namespace ICSharpCode.ILSpy.Debugger.Commands
public override void Execute(object parameter)
{
if (CurrentDebugger.IsDebugging && !CurrentDebugger.IsProcessRunning) {
CurrentLineBookmark.Remove();
CurrentDebugger.Continue();
MainWindow.Instance.SetStatus("Running...", Brushes.Black);
}

5
Debugger/ILSpy.Debugger/ILSpy.Debugger.csproj

@ -87,8 +87,6 @@ @@ -87,8 +87,6 @@
<Compile Include="Models\TreeModel\TreeNode.cs" />
<Compile Include="Models\TreeModel\Utils.cs" />
<Compile Include="Services\Debugger\DebuggerHelper.cs" />
<Compile Include="Services\Debugger\DebuggerService.cs" />
<Compile Include="Services\Debugger\IDebugger.cs" />
<Compile Include="Services\Debugger\ListHelper.cs" />
<Compile Include="Services\Debugger\TypeResolverExtension.cs" />
<Compile Include="Services\Debugger\WindowsDebugger.cs" />
@ -96,13 +94,11 @@ @@ -96,13 +94,11 @@
<Compile Include="Services\ImageService\ImageService.cs" />
<Compile Include="Models\RunningProcess.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\ParserService\ParserService.cs" />
<Compile Include="ToolTips\DebuggerPopup.cs" />
<Compile Include="ToolTips\DebuggerTooltipControl.xaml.cs">
<DependentUpon>DebuggerTooltipControl.xaml</DependentUpon>
</Compile>
<Compile Include="ToolTips\LazyItemsControl.cs" />
<Compile Include="ToolTips\Models\ToolTipRequestEventArgs.cs" />
<Compile Include="ToolTips\TextEditorListener.cs" />
<Compile Include="ToolTips\VirtualizingIEnumerable.cs" />
<Compile Include="UI\AttachToProcessWindow.xaml.cs">
@ -123,7 +119,6 @@ @@ -123,7 +119,6 @@
<Folder Include="Models\TreeModel" />
<Folder Include="Commands" />
<Folder Include="ToolTips" />
<Folder Include="ToolTips\Models" />
</ItemGroup>
<ItemGroup>
<Page Include="ToolTips\DebuggerTooltipControl.xaml" />

11
Debugger/ILSpy.Debugger/Services/Debugger/WindowsDebugger.cs

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ComponentModel.Composition;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
@ -27,6 +28,7 @@ using StackFrame = Debugger.StackFrame; @@ -27,6 +28,7 @@ using StackFrame = Debugger.StackFrame;
namespace ICSharpCode.ILSpy.Debugger.Services
{
[Export(typeof(IDebugger))]
public class WindowsDebugger : IDebugger
{
enum StopAttachedProcessDialogResult {
@ -283,7 +285,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -283,7 +285,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services
int key = frame.MethodInfo.MetadataToken;
// get the mapped instruction from the current line marker or the next one
if (!DebugInformation.CodeMappings.ContainsKey(key))
if (DebugInformation.CodeMappings == null || !DebugInformation.CodeMappings.ContainsKey(key))
return null;
return DebugInformation.CodeMappings[key].GetInstructionByTokenAndOffset(key, frame.IP, out isMatch);
@ -550,7 +552,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -550,7 +552,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services
debugger,
bookmark.MemberReference.DeclaringType.FullName,
bookmark.LineNumber,
bookmark.MemberReference.MetadataToken.ToInt32(),
bookmark.FunctionToken,
bookmark.ILRange.From,
bookmark.IsEnabled);
@ -796,11 +798,12 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -796,11 +798,12 @@ namespace ICSharpCode.ILSpy.Debugger.Services
int line;
MemberReference memberReference;
if (DebugInformation.CodeMappings.ContainsKey(token) &&
if (DebugInformation.CodeMappings != null &&
DebugInformation.CodeMappings.ContainsKey(token) &&
DebugInformation.CodeMappings[token].GetInstructionByTokenAndOffset(token, ilOffset, out memberReference, out line)) {
DebugInformation.DebugStepInformation = null; // we do not need to step into/out
DebuggerService.RemoveCurrentLineMarker();
DebuggerService.JumpToCurrentLine(memberReference, line, 0, line, 0);
DebuggerService.JumpToCurrentLine(memberReference, line, 0, line, 0, ilOffset);
}
else {
StepIntoUnknownFrame(frame);

52
ILSpy.SharpDevelop.LGPL/AvalonEdit/IconBarMargin.cs

@ -15,6 +15,7 @@ using ICSharpCode.Decompiler; @@ -15,6 +15,7 @@ using ICSharpCode.Decompiler;
using ICSharpCode.ILSpy.Bookmarks;
using ICSharpCode.ILSpy.Debugger;
using ICSharpCode.ILSpy.Debugger.Bookmarks;
using ICSharpCode.ILSpy.Debugger.Services;
using ICSharpCode.NRefactory.CSharp;
using Mono.Cecil;
@ -70,10 +71,15 @@ namespace ICSharpCode.ILSpy.AvalonEdit @@ -70,10 +71,15 @@ namespace ICSharpCode.ILSpy.AvalonEdit
// create a dictionary line number => first bookmark
Dictionary<int, IBookmark> bookmarkDict = new Dictionary<int, IBookmark>();
foreach (var bm in BookmarkManager.Bookmarks) {
if (DebugInformation.DecompiledMemberReferences == null || DebugInformation.DecompiledMemberReferences.Count == 0 ||
!DebugInformation.DecompiledMemberReferences.ContainsKey(bm.MemberReference.MetadataToken.ToInt32()))
continue;
if (bm is BreakpointBookmark) {
if (DebugInformation.CodeMappings == null || DebugInformation.CodeMappings.Count == 0 ||
!DebugInformation.CodeMappings.ContainsKey(((BreakpointBookmark)bm).FunctionToken))
continue;
} else {
if (DebugInformation.DecompiledMemberReferences == null || DebugInformation.DecompiledMemberReferences.Count == 0 ||
!DebugInformation.DecompiledMemberReferences.ContainsKey(((MarkerBookmark)bm).MemberReference.MetadataToken.ToInt32()))
continue;
}
int line = bm.LineNumber;
IBookmark existingBookmark;
if (!bookmarkDict.TryGetValue(line, out existingBookmark) || bm.ZOrder > existingBookmark.ZOrder)
@ -248,26 +254,24 @@ namespace ICSharpCode.ILSpy.AvalonEdit @@ -248,26 +254,24 @@ namespace ICSharpCode.ILSpy.AvalonEdit
if (storage == null || storage.Count == 0)
return;
//remove existing bookmarks and create new ones
// TODO: handle other types of bookmarks
// remove existing bookmarks and create new ones
List<BreakpointBookmark> newBookmarks = new List<BreakpointBookmark>();
for (int i = BookmarkManager.Bookmarks.Count - 1; i >= 0; --i) {
var breakpoint = BookmarkManager.Bookmarks[i] as BreakpointBookmark;
if (breakpoint == null)
continue;
var key = breakpoint.MemberReference.MetadataToken.ToInt32();
var key = breakpoint.FunctionToken;
if (!storage.ContainsKey(key))
continue;
var member = DebugInformation.DecompiledMemberReferences[key];
bool isMatch;
SourceCodeMapping map = storage[key].GetInstructionByTokenAndOffset(
member.MetadataToken.ToInt32(), breakpoint.ILRange.From, out isMatch);
SourceCodeMapping map = storage[key].GetInstructionByTokenAndOffset(key, breakpoint.ILRange.From, out isMatch);
if (map != null) {
newBookmarks.Add(new BreakpointBookmark(
member, new AstLocation(map.SourceCodeLine, 0),
breakpoint.MemberReference, new AstLocation(map.SourceCodeLine, 0), breakpoint.FunctionToken,
map.ILInstructionOffset, BreakpointAction.Break, DebugInformation.Language));
BookmarkManager.RemoveMark(breakpoint);
@ -285,33 +289,25 @@ namespace ICSharpCode.ILSpy.AvalonEdit @@ -285,33 +289,25 @@ namespace ICSharpCode.ILSpy.AvalonEdit
if (CurrentLineBookmark.Instance == null)
return;
var oldMappings = DebugInformation.OldCodeMappings;
var newMappings = DebugInformation.CodeMappings;
if (oldMappings == null || newMappings == null)
var codeMappings = DebugInformation.CodeMappings;
if (codeMappings == null)
return;
// 1. Save it's data
int line = CurrentLineBookmark.Instance.LineNumber;
var markerType = CurrentLineBookmark.Instance.MemberReference;
int token = markerType.MetadataToken.ToInt32();
int offset = CurrentLineBookmark.Instance.ILOffset;
if (!oldMappings.ContainsKey(markerType.MetadataToken.ToInt32()) || !newMappings.ContainsKey(markerType.MetadataToken.ToInt32()))
if (!codeMappings.ContainsKey(token))
return;
// 2. Remove it
CurrentLineBookmark.Remove();
// 3. map the marker line
int token;
var instruction = oldMappings[markerType.MetadataToken.ToInt32()].GetInstructionByLineNumber(line, out token);
if (instruction == null)
return;
// 2. map the marker line
MemberReference memberReference;
int newline;
if (newMappings[markerType.MetadataToken.ToInt32()].GetInstructionByTokenAndOffset(token, instruction.ILInstructionOffset.From, out memberReference, out newline)) {
// 4. create breakpoint for new languages
CurrentLineBookmark.SetPosition(memberReference, newline, 0, newline, 0);
if (codeMappings[token].GetInstructionByTokenAndOffset(token, offset, out memberReference, out newline)) {
// 3. create breakpoint for new languages
DebuggerService.JumpToCurrentLine(memberReference, newline, 0, newline, 0, offset);
}
}
}

19
ILSpy.SharpDevelop.LGPL/Bookmarks/BreakpointBookmark.cs

@ -40,6 +40,15 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks @@ -40,6 +40,15 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks
}
}
/// <summary>
/// Gets the function/method where the breakpoint is set.
/// <remarks>
/// In case of methods, it is the same as the MemberReference metadata token.<br/>
/// In case of properties and events, it's the GetMethod/SetMethod|AddMethod/RemoveMethod token.
/// </remarks>
/// </summary>
public int FunctionToken { get; private set; }
public ILRange ILRange { get; private set; }
public virtual bool IsHealthy {
@ -72,12 +81,14 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks @@ -72,12 +81,14 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks
public string Tooltip { get; private set; }
public BreakpointBookmark(MemberReference member, AstLocation location, ILRange range, BreakpointAction action, DecompiledLanguages language) : base(member, location)
public BreakpointBookmark(MemberReference member, AstLocation location, int functionToken, ILRange range, BreakpointAction action, DecompiledLanguages language)
: base(member, location)
{
this.action = action;
this.FunctionToken = functionToken;
this.ILRange = range;
this.Tooltip = string.Format("Language:{0}, Line:{1}, IL range:{2}-{3}", language.ToString(), location.Line, range.From, range.To);
this.Language = language;
this.Language = language;
}
public override ImageSource Image {
@ -91,8 +102,8 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks @@ -91,8 +102,8 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks
ITextMarker marker = markerService.Create(offset, length);
marker.BackgroundColor = Color.FromRgb(180, 38, 38);
marker.ForegroundColor = Colors.White;
marker.IsVisible = b => b is MarkerBookmark && DebugInformation.DecompiledMemberReferences != null &&
DebugInformation.DecompiledMemberReferences.ContainsKey(((MarkerBookmark)b).MemberReference.MetadataToken.ToInt32());
marker.IsVisible = b => b is BreakpointBookmark && DebugInformation.CodeMappings != null &&
DebugInformation.CodeMappings.ContainsKey(((BreakpointBookmark)b).FunctionToken);
marker.Bookmark = this;
this.Marker = marker;

10
ILSpy.SharpDevelop.LGPL/Bookmarks/CurrentLineBookmark.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks @@ -24,7 +24,7 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks
static int endLine;
static int endColumn;
public static void SetPosition(MemberReference memberReference, int makerStartLine, int makerStartColumn, int makerEndLine, int makerEndColumn)
public static void SetPosition(MemberReference memberReference, int makerStartLine, int makerStartColumn, int makerEndLine, int makerEndColumn, int ilOffset)
{
Remove();
@ -33,7 +33,7 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks @@ -33,7 +33,7 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks
endLine = makerEndLine;
endColumn = makerEndColumn;
instance = new CurrentLineBookmark(memberReference, new AstLocation(startLine, startColumn));
instance = new CurrentLineBookmark(memberReference, new AstLocation(startLine, startColumn), ilOffset);
BookmarkManager.AddMark(instance);
}
@ -53,11 +53,13 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks @@ -53,11 +53,13 @@ namespace ICSharpCode.ILSpy.Debugger.Bookmarks
get { return 100; }
}
public CurrentLineBookmark(MemberReference member, AstLocation location) : base(member, location)
public CurrentLineBookmark(MemberReference member, AstLocation location, int ilOffset) : base(member, location)
{
this.ILOffset = ilOffset;
}
public int ILOffset { get; private set; }
public override ImageSource Image {
get { return Images.CurrentLine; }
}

5
ILSpy.SharpDevelop.LGPL/DebugInformation.cs

@ -47,11 +47,6 @@ namespace ICSharpCode.ILSpy.Debugger @@ -47,11 +47,6 @@ namespace ICSharpCode.ILSpy.Debugger
/// </summary>
public static ConcurrentDictionary<int, IEnumerable<ILVariable>> LocalVariables { get; set; }
/// <summary>
/// Gets or sets the old code mappings.
/// </summary>
public static Dictionary<int, List<MemberMapping>> OldCodeMappings { get; set; }
/// <summary>
/// Gets or sets the MembeReference that was decompiled (a TypeDefinition, MethodDefinition, etc)
/// </summary>

8
ILSpy.SharpDevelop.LGPL/ILSpy.SharpDevelop.LGPL.csproj

@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
<Optimize>True</Optimize>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
@ -76,11 +76,17 @@ @@ -76,11 +76,17 @@
<Compile Include="Bookmarks\MarkerBookmark.cs" />
<Compile Include="DebugInformation.cs" />
<Compile Include="Images.cs" />
<Compile Include="Models\ToolTipRequestEventArgs.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\DebuggerService.cs" />
<Compile Include="Services\IDebugger.cs" />
<Compile Include="Services\ParserService.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="AvalonEdit" />
<Folder Include="Bookmarks" />
<Folder Include="Models" />
<Folder Include="Services" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj">

2
Debugger/ILSpy.Debugger/ToolTips/Models/ToolTipRequestEventArgs.cs → ILSpy.SharpDevelop.LGPL/Models/ToolTipRequestEventArgs.cs

@ -7,7 +7,7 @@ using ICSharpCode.NRefactory.CSharp; @@ -7,7 +7,7 @@ using ICSharpCode.NRefactory.CSharp;
namespace ICSharpCode.ILSpy.Debugger.Tooltips
{
internal class ToolTipRequestEventArgs : EventArgs
public class ToolTipRequestEventArgs : EventArgs
{
/// <summary>
/// Gets whether the tool tip request was handled.

19
Debugger/ILSpy.Debugger/Services/Debugger/DebuggerService.cs → ILSpy.SharpDevelop.LGPL/Services/DebuggerService.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -26,7 +26,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services
static IDebugger GetCompatibleDebugger()
{
return currentDebugger = new WindowsDebugger();
return currentDebugger;
}
/// <summary>
@ -38,6 +38,8 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -38,6 +38,8 @@ namespace ICSharpCode.ILSpy.Debugger.Services
get {
if (currentDebugger == null) {
currentDebugger = GetCompatibleDebugger();
if (currentDebugger == null)
return null;
currentDebugger.DebugStarting += new EventHandler(OnDebugStarting);
currentDebugger.DebugStarted += new EventHandler(OnDebugStarted);
currentDebugger.DebugStopped += new EventHandler(OnDebugStopped);
@ -165,12 +167,12 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -165,12 +167,12 @@ namespace ICSharpCode.ILSpy.Debugger.Services
}
}
public static void ToggleBreakpointAt(MemberReference member, int lineNumber, ILRange range, DecompiledLanguages language)
public static void ToggleBreakpointAt(MemberReference member, int lineNumber, int functionToken, ILRange range, DecompiledLanguages language)
{
BookmarkManager.ToggleBookmark(
member.FullName, lineNumber,
b => b.CanToggle && b is BreakpointBookmark,
location => new BreakpointBookmark(member, location, range, BreakpointAction.Break, language));
location => new BreakpointBookmark(member, location, functionToken, range, BreakpointAction.Break, language));
}
/* TODO: reimplement this stuff
@ -186,9 +188,9 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -186,9 +188,9 @@ namespace ICSharpCode.ILSpy.Debugger.Services
CurrentLineBookmark.Remove();
}
public static void JumpToCurrentLine(MemberReference memberReference, int startLine, int startColumn, int endLine, int endColumn)
public static void JumpToCurrentLine(MemberReference memberReference, int startLine, int startColumn, int endLine, int endColumn, int ilOffset)
{
CurrentLineBookmark.SetPosition(memberReference, startLine, startColumn, endLine, endColumn);
CurrentLineBookmark.SetPosition(memberReference, startLine, startColumn, endLine, endColumn, ilOffset);
}
#region Tool tips
@ -198,7 +200,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -198,7 +200,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services
/// showing its current value (when in debugging mode) can be returned
/// through the ToolTipRequestEventArgs.SetTooltip() method.
/// </summary>
internal static void HandleToolTipRequest(ToolTipRequestEventArgs e)
public static void HandleToolTipRequest(ToolTipRequestEventArgs e)
{
if (!e.InDocument)
return;
@ -384,5 +386,10 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -384,5 +386,10 @@ namespace ICSharpCode.ILSpy.Debugger.Services
// return text.ToString();
// }
#endregion
public static void SetDebugger(Lazy<IDebugger> debugger)
{
currentDebugger = debugger.Value;
}
}
}

0
Debugger/ILSpy.Debugger/Services/Debugger/IDebugger.cs → ILSpy.SharpDevelop.LGPL/Services/IDebugger.cs

11
Debugger/ILSpy.Debugger/Services/ParserService/ParserService.cs → ILSpy.SharpDevelop.LGPL/Services/ParserService.cs

@ -15,7 +15,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -15,7 +15,7 @@ namespace ICSharpCode.ILSpy.Debugger.Services
static ParserService()
{
mySet.AddRange((new [] {
mySet.AddRange((new string [] {
".",
"{",
"}",
@ -41,7 +41,14 @@ namespace ICSharpCode.ILSpy.Debugger.Services @@ -41,7 +41,14 @@ namespace ICSharpCode.ILSpy.Debugger.Services
@"\t",
@"\r",
"|"
}).AsReadOnly());
}));
}
static void AddRange<T>(this ICollection<T> list, IEnumerable<T> items)
{
foreach (T item in items)
if (!list.Contains(item))
list.Add(item);
}
/// <summary>

10
ILSpy/App.xaml.cs

@ -17,16 +17,16 @@ @@ -17,16 +17,16 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition.Hosting;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Navigation;
using System.Windows.Threading;
using ICSharpCode.ILSpy.Debugger.Services;
using ICSharpCode.ILSpy.TextView;
namespace ICSharpCode.ILSpy
@ -73,6 +73,12 @@ namespace ICSharpCode.ILSpy @@ -73,6 +73,12 @@ namespace ICSharpCode.ILSpy
EventManager.RegisterClassHandler(typeof(Window),
Hyperlink.RequestNavigateEvent,
new RequestNavigateEventHandler(Window_RequestNavigate));
try {
DebuggerService.SetDebugger(compositionContainer.GetExport<IDebugger>());
} catch {
// unable to find a IDebugger
}
}
string FullyQualifyPath(string argument)

7
ILSpy/TextView/DecompilerTextView.cs

@ -46,6 +46,7 @@ using ICSharpCode.ILSpy.AvalonEdit; @@ -46,6 +46,7 @@ using ICSharpCode.ILSpy.AvalonEdit;
using ICSharpCode.ILSpy.Bookmarks;
using ICSharpCode.ILSpy.Debugger;
using ICSharpCode.ILSpy.Debugger.Bookmarks;
using ICSharpCode.ILSpy.Debugger.Services;
using ICSharpCode.ILSpy.Options;
using ICSharpCode.ILSpy.TreeNodes;
using ICSharpCode.ILSpy.XmlDoc;
@ -452,7 +453,7 @@ namespace ICSharpCode.ILSpy.TextView @@ -452,7 +453,7 @@ namespace ICSharpCode.ILSpy.TextView
iconMargin.SyncBookmarks();
if (isDecompilationOk) {
if (DebugInformation.DebugStepInformation != null) {
if (DebugInformation.DebugStepInformation != null && DebuggerService.CurrentDebugger != null) {
// repaint bookmarks
iconMargin.InvalidateVisual();
@ -467,8 +468,7 @@ namespace ICSharpCode.ILSpy.TextView @@ -467,8 +468,7 @@ namespace ICSharpCode.ILSpy.TextView
DebugInformation.CodeMappings[token].GetInstructionByTokenAndOffset(token, ilOffset, out member, out line);
// update marker
CurrentLineBookmark.Remove();
CurrentLineBookmark.SetPosition(member, line, 0, line, 0);
DebuggerService.JumpToCurrentLine(member, line, 0, line, 0, ilOffset);
var bm = CurrentLineBookmark.Instance;
DocumentLine docline = textEditor.Document.GetLineByNumber(line);
@ -530,7 +530,6 @@ namespace ICSharpCode.ILSpy.TextView @@ -530,7 +530,6 @@ namespace ICSharpCode.ILSpy.TextView
void DecompileNodes(DecompilationContext context, ITextOutput textOutput)
{
// reset data
DebugInformation.OldCodeMappings = DebugInformation.CodeMappings;
DebugInformation.CodeMappings = null;
DebugInformation.LocalVariables = null;
DebugInformation.DecompiledMemberReferences = null;

Loading…
Cancel
Save