Skip to content

Commit 8ca826b

Browse files
author
David Karlaš
committed
Added support for storing breakpoints as relative paths via optional baseDir parameter in BreakpointStore Save/Load methods
1 parent 69fe553 commit 8ca826b

File tree

5 files changed

+38
-27
lines changed

5 files changed

+38
-27
lines changed

Mono.Debugging/Mono.Debugging.Client/BreakEvent.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public BreakEvent ()
5050
{
5151
}
5252

53-
internal BreakEvent (XmlElement elem)
53+
internal BreakEvent (XmlElement elem, string baseDir)
5454
{
5555
string s = elem.GetAttribute ("enabled");
5656
if (s.Length > 0)
@@ -85,7 +85,7 @@ internal BreakEvent (XmlElement elem)
8585
breakIfConditionChanges = false;
8686
}
8787

88-
internal virtual XmlElement ToXml (XmlDocument doc)
88+
internal virtual XmlElement ToXml (XmlDocument doc, string baseDir)
8989
{
9090
XmlElement elem = doc.CreateElement (GetType().Name);
9191
if (!enabled)
@@ -108,14 +108,14 @@ internal virtual XmlElement ToXml (XmlDocument doc)
108108
return elem;
109109
}
110110

111-
internal static BreakEvent FromXml (XmlElement elem)
111+
internal static BreakEvent FromXml (XmlElement elem, string baseDir)
112112
{
113113
if (elem.Name == "FunctionBreakpoint")
114-
return new FunctionBreakpoint (elem);
114+
return new FunctionBreakpoint (elem, baseDir);
115115
if (elem.Name == "Breakpoint")
116-
return new Breakpoint (elem);
116+
return new Breakpoint (elem, baseDir);
117117
if (elem.Name == "Catchpoint")
118-
return new Catchpoint (elem);
118+
return new Catchpoint (elem, baseDir);
119119

120120
return null;
121121
}

Mono.Debugging/Mono.Debugging.Client/Breakpoint.cs

+22-11
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
using System;
2929
using System.Xml;
30+
using System.IO;
3031

3132
namespace Mono.Debugging.Client
3233
{
@@ -50,11 +51,16 @@ public Breakpoint (string fileName, int line) : this (fileName, line, 1)
5051
{
5152
}
5253

53-
internal Breakpoint (XmlElement elem): base (elem)
54+
internal Breakpoint (XmlElement elem, string baseDir) : base (elem, baseDir)
5455
{
55-
string s = elem.GetAttribute ("file");
56-
if (!string.IsNullOrEmpty (s))
57-
fileName = s;
56+
string s = elem.GetAttribute ("relfile");
57+
if (!string.IsNullOrEmpty (s) && baseDir != null) {
58+
fileName = Path.Combine (baseDir, s);
59+
} else {
60+
s = elem.GetAttribute ("file");
61+
if (!string.IsNullOrEmpty (s))
62+
fileName = s;
63+
}
5864

5965
s = elem.GetAttribute ("line");
6066
if (string.IsNullOrEmpty (s) || !int.TryParse (s, out line))
@@ -64,17 +70,22 @@ internal Breakpoint (XmlElement elem): base (elem)
6470
if (string.IsNullOrEmpty (s) || !int.TryParse (s, out column))
6571
column = 1;
6672
}
67-
68-
internal override XmlElement ToXml (XmlDocument doc)
73+
74+
internal override XmlElement ToXml (XmlDocument doc, string baseDir)
6975
{
70-
XmlElement elem = base.ToXml (doc);
71-
72-
if (!string.IsNullOrEmpty (fileName))
76+
XmlElement elem = base.ToXml (doc, baseDir);
77+
78+
if (!string.IsNullOrEmpty (fileName)) {
7379
elem.SetAttribute ("file", fileName);
74-
80+
if (baseDir != null) {
81+
if (fileName.StartsWith (baseDir, StringComparison.Ordinal))
82+
elem.SetAttribute ("relfile", fileName.Substring (baseDir.Length).TrimStart (Path.DirectorySeparatorChar));
83+
}
84+
}
85+
7586
elem.SetAttribute ("line", line.ToString ());
7687
elem.SetAttribute ("column", column.ToString ());
77-
88+
7889
return elem;
7990
}
8091

Mono.Debugging/Mono.Debugging.Client/BreakpointStore.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -393,27 +393,27 @@ internal void ResetBreakpoints ()
393393
}
394394
}
395395

396-
public XmlElement Save ()
396+
public XmlElement Save (string baseDir = null)
397397
{
398398
XmlDocument doc = new XmlDocument ();
399399
XmlElement elem = doc.CreateElement ("BreakpointStore");
400400
foreach (BreakEvent ev in this) {
401401
if (ev.NonUserBreakpoint)
402402
continue;
403-
XmlElement be = ev.ToXml (doc);
403+
XmlElement be = ev.ToXml (doc, baseDir);
404404
elem.AppendChild (be);
405405
}
406406
return elem;
407407
}
408408

409-
public void Load (XmlElement rootElem)
409+
public void Load (XmlElement rootElem, string baseDir = null)
410410
{
411411
Clear ();
412412
foreach (XmlNode n in rootElem.ChildNodes) {
413413
XmlElement elem = n as XmlElement;
414414
if (elem == null)
415415
continue;
416-
BreakEvent ev = BreakEvent.FromXml (elem);
416+
BreakEvent ev = BreakEvent.FromXml (elem, baseDir);
417417
if (ev != null)
418418
Add (ev);
419419
}

Mono.Debugging/Mono.Debugging.Client/Catchpoint.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public Catchpoint (string exceptionName, bool includeSubclasses)
4646
this.includeSubclasses = includeSubclasses;
4747
}
4848

49-
internal Catchpoint (XmlElement elem): base (elem)
49+
internal Catchpoint (XmlElement elem, string baseDir): base (elem, baseDir)
5050
{
5151
exceptionName = elem.GetAttribute ("exceptionName");
5252

@@ -57,9 +57,9 @@ internal Catchpoint (XmlElement elem): base (elem)
5757
}
5858
}
5959

60-
internal override XmlElement ToXml (XmlDocument doc)
60+
internal override XmlElement ToXml (XmlDocument doc, string baseDir)
6161
{
62-
XmlElement elem = base.ToXml (doc);
62+
XmlElement elem = base.ToXml (doc, baseDir);
6363
elem.SetAttribute ("exceptionName", exceptionName);
6464
elem.SetAttribute ("includeSubclasses", includeSubclasses.ToString ());
6565
return elem;

Mono.Debugging/Mono.Debugging.Client/FunctionBreakpoint.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public static bool TryParseParameters (string text, int startIndex, int endIndex
129129
return true;
130130
}
131131

132-
internal FunctionBreakpoint (XmlElement elem) : base (elem)
132+
internal FunctionBreakpoint (XmlElement elem, string baseDir) : base (elem, baseDir)
133133
{
134134
FunctionName = elem.GetAttribute ("function");
135135

@@ -152,9 +152,9 @@ internal FunctionBreakpoint (XmlElement elem) : base (elem)
152152
FileName = null;
153153
}
154154

155-
internal override XmlElement ToXml (XmlDocument doc)
155+
internal override XmlElement ToXml (XmlDocument doc, string baseDir)
156156
{
157-
XmlElement elem = base.ToXml (doc);
157+
XmlElement elem = base.ToXml (doc, baseDir);
158158

159159
elem.SetAttribute ("function", FunctionName);
160160
elem.SetAttribute ("language", Language);

0 commit comments

Comments
 (0)