return seqPointInfo;
}
+
+ public void StoreSymbols (params string[] lookupDirs)
+ {
+ foreach (var dir in lookupDirs) {
+ var exeFiles = Directory.GetFiles (dir, "*.exe");
+ var dllFiles = Directory.GetFiles (dir, "*.dll");
+ var assemblies = exeFiles.Concat (dllFiles);
+ foreach (var assemblyPath in assemblies) {
+ var mdbPath = assemblyPath + ".mdb";
+ if (!File.Exists (mdbPath)) {
+ // assemblies without mdb files are useless
+ continue;
+ }
+
+ var assembly = AssemblyDefinition.ReadAssembly (assemblyPath);
+
+ var mvid = assembly.MainModule.Mvid.ToString ().ToUpper ();
+ var mvidDir = Path.Combine (msymDir, mvid);
+
+ Directory.CreateDirectory (mvidDir);
+
+ var mvidAssemblyPath = Path.Combine (mvidDir, Path.GetFileName (assemblyPath));
+ File.Copy (assemblyPath, mvidAssemblyPath);
+
+ var mvidMdbPath = Path.Combine (mvidDir, Path.GetFileName (mdbPath));
+ File.Copy (mdbPath, mvidMdbPath);
+
+ // TODO create MVID dir for non main modules with links to main module MVID
+ }
+ }
+ }
}
}
{
public static int Main (String[] args)
{
- if (args.Length < 2) {
+ if (args.Length != 2 && (args[0] == "store-symbols" && args.Length < 3)) {
Console.Error.WriteLine ("Usage: symbolicate <msym dir> <input file>");
+ Console.Error.WriteLine (" symbolicate store-symbols <msym dir> [<dir>]+");
return 1;
}
- var msymDir = args [0];
- var inputFile = args [1];
+ if (args[0] == "store-symbols") {
+ var msymDir = args[1];
+ var lookupDirs = args.Skip (1).ToArray ();
- var symbolManager = new SymbolManager (msymDir);
+ var symbolManager = new SymbolManager (msymDir);
- using (StreamReader r = new StreamReader (inputFile)) {
- var sb = Process (r, symbolManager);
- Console.WriteLine (sb.ToString ());
+ symbolManager.StoreSymbols (lookupDirs);
+
+ } else {
+ var msymDir = args [0];
+ var inputFile = args [1];
+
+ var symbolManager = new SymbolManager (msymDir);
+
+ using (StreamReader r = new StreamReader (inputFile)) {
+ var sb = Process (r, symbolManager);
+ Console.Write (sb.ToString ());
+ }
}
return 0;