Skip to content

Commit

Permalink
Added support for storing breakpoints as relative paths via optional …
Browse files Browse the repository at this point in the history
…baseDir parameter in BreakpointStore Save/Load methods
  • Loading branch information
David Karlaš committed Aug 24, 2016
1 parent 69fe553 commit 8ca826b
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 27 deletions.
12 changes: 6 additions & 6 deletions Mono.Debugging/Mono.Debugging.Client/BreakEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public BreakEvent ()
{
}

internal BreakEvent (XmlElement elem)
internal BreakEvent (XmlElement elem, string baseDir)
{
string s = elem.GetAttribute ("enabled");
if (s.Length > 0)
Expand Down Expand Up @@ -85,7 +85,7 @@ internal BreakEvent (XmlElement elem)
breakIfConditionChanges = false;
}

internal virtual XmlElement ToXml (XmlDocument doc)
internal virtual XmlElement ToXml (XmlDocument doc, string baseDir)
{
XmlElement elem = doc.CreateElement (GetType().Name);
if (!enabled)
Expand All @@ -108,14 +108,14 @@ internal virtual XmlElement ToXml (XmlDocument doc)
return elem;
}

internal static BreakEvent FromXml (XmlElement elem)
internal static BreakEvent FromXml (XmlElement elem, string baseDir)
{
if (elem.Name == "FunctionBreakpoint")
return new FunctionBreakpoint (elem);
return new FunctionBreakpoint (elem, baseDir);
if (elem.Name == "Breakpoint")
return new Breakpoint (elem);
return new Breakpoint (elem, baseDir);
if (elem.Name == "Catchpoint")
return new Catchpoint (elem);
return new Catchpoint (elem, baseDir);

return null;
}
Expand Down
33 changes: 22 additions & 11 deletions Mono.Debugging/Mono.Debugging.Client/Breakpoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

using System;
using System.Xml;
using System.IO;

namespace Mono.Debugging.Client
{
Expand All @@ -50,11 +51,16 @@ public Breakpoint (string fileName, int line) : this (fileName, line, 1)
{
}

internal Breakpoint (XmlElement elem): base (elem)
internal Breakpoint (XmlElement elem, string baseDir) : base (elem, baseDir)
{
string s = elem.GetAttribute ("file");
if (!string.IsNullOrEmpty (s))
fileName = s;
string s = elem.GetAttribute ("relfile");
if (!string.IsNullOrEmpty (s) && baseDir != null) {
fileName = Path.Combine (baseDir, s);
} else {
s = elem.GetAttribute ("file");
if (!string.IsNullOrEmpty (s))
fileName = s;
}

s = elem.GetAttribute ("line");
if (string.IsNullOrEmpty (s) || !int.TryParse (s, out line))
Expand All @@ -64,17 +70,22 @@ internal Breakpoint (XmlElement elem): base (elem)
if (string.IsNullOrEmpty (s) || !int.TryParse (s, out column))
column = 1;
}
internal override XmlElement ToXml (XmlDocument doc)

internal override XmlElement ToXml (XmlDocument doc, string baseDir)
{
XmlElement elem = base.ToXml (doc);
if (!string.IsNullOrEmpty (fileName))
XmlElement elem = base.ToXml (doc, baseDir);

if (!string.IsNullOrEmpty (fileName)) {
elem.SetAttribute ("file", fileName);

if (baseDir != null) {
if (fileName.StartsWith (baseDir, StringComparison.Ordinal))
elem.SetAttribute ("relfile", fileName.Substring (baseDir.Length).TrimStart (Path.DirectorySeparatorChar));
}
}

elem.SetAttribute ("line", line.ToString ());
elem.SetAttribute ("column", column.ToString ());

return elem;
}

Expand Down
8 changes: 4 additions & 4 deletions Mono.Debugging/Mono.Debugging.Client/BreakpointStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -393,27 +393,27 @@ internal void ResetBreakpoints ()
}
}

public XmlElement Save ()
public XmlElement Save (string baseDir = null)
{
XmlDocument doc = new XmlDocument ();
XmlElement elem = doc.CreateElement ("BreakpointStore");
foreach (BreakEvent ev in this) {
if (ev.NonUserBreakpoint)
continue;
XmlElement be = ev.ToXml (doc);
XmlElement be = ev.ToXml (doc, baseDir);
elem.AppendChild (be);
}
return elem;
}

public void Load (XmlElement rootElem)
public void Load (XmlElement rootElem, string baseDir = null)
{
Clear ();
foreach (XmlNode n in rootElem.ChildNodes) {
XmlElement elem = n as XmlElement;
if (elem == null)
continue;
BreakEvent ev = BreakEvent.FromXml (elem);
BreakEvent ev = BreakEvent.FromXml (elem, baseDir);
if (ev != null)
Add (ev);
}
Expand Down
6 changes: 3 additions & 3 deletions Mono.Debugging/Mono.Debugging.Client/Catchpoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public Catchpoint (string exceptionName, bool includeSubclasses)
this.includeSubclasses = includeSubclasses;
}

internal Catchpoint (XmlElement elem): base (elem)
internal Catchpoint (XmlElement elem, string baseDir): base (elem, baseDir)
{
exceptionName = elem.GetAttribute ("exceptionName");

Expand All @@ -57,9 +57,9 @@ internal Catchpoint (XmlElement elem): base (elem)
}
}

internal override XmlElement ToXml (XmlDocument doc)
internal override XmlElement ToXml (XmlDocument doc, string baseDir)
{
XmlElement elem = base.ToXml (doc);
XmlElement elem = base.ToXml (doc, baseDir);
elem.SetAttribute ("exceptionName", exceptionName);
elem.SetAttribute ("includeSubclasses", includeSubclasses.ToString ());
return elem;
Expand Down
6 changes: 3 additions & 3 deletions Mono.Debugging/Mono.Debugging.Client/FunctionBreakpoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ public static bool TryParseParameters (string text, int startIndex, int endIndex
return true;
}

internal FunctionBreakpoint (XmlElement elem) : base (elem)
internal FunctionBreakpoint (XmlElement elem, string baseDir) : base (elem, baseDir)
{
FunctionName = elem.GetAttribute ("function");

Expand All @@ -152,9 +152,9 @@ internal FunctionBreakpoint (XmlElement elem) : base (elem)
FileName = null;
}

internal override XmlElement ToXml (XmlDocument doc)
internal override XmlElement ToXml (XmlDocument doc, string baseDir)
{
XmlElement elem = base.ToXml (doc);
XmlElement elem = base.ToXml (doc, baseDir);

elem.SetAttribute ("function", FunctionName);
elem.SetAttribute ("language", Language);
Expand Down

0 comments on commit 8ca826b

Please sign in to comment.