[Tizen] Search symbol directories recursively (#27)
authorSangwook Kim <swift.kim@samsung.com>
Wed, 22 Apr 2020 09:01:00 +0000 (18:01 +0900)
committerMikhail Kurinnoi <m.kurinnoi@samsung.com>
Thu, 29 Sep 2022 09:40:48 +0000 (12:40 +0300)
The SOS command 'setsymbolserver -directory' will automatically search
all subdirectories of the specified directory.

src/Microsoft.Diagnostics.DebugServices.Implementation/SymbolService.cs

index b7fba2507937456d4867b2431e670a4be82caa40..ed4d5088cca157067d34af5974f32a6a63206d00 100644 (file)
@@ -11,6 +11,7 @@ using SOS;
 using System;
 using System.Collections.Generic;
 using System.Collections.Immutable;
+using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
 using System.Linq;
@@ -330,9 +331,20 @@ namespace Microsoft.Diagnostics.DebugServices.Implementation
             Microsoft.SymbolStore.SymbolStores.SymbolStore store = _symbolStore;
             symbolDirectoryPath = Path.GetFullPath(symbolDirectoryPath);
 
-            if (!IsDuplicateSymbolStore<DirectorySymbolStore>(store, (directorySymbolStore) => IsPathEqual(symbolDirectoryPath, directorySymbolStore.Directory)))
+            var probingPaths = new List<string> { symbolDirectoryPath };
+            if (Directory.Exists(symbolDirectoryPath))
+            {
+                // Add all subdirectories.
+                probingPaths.AddRange(Directory.GetDirectories(symbolDirectoryPath, "*", SearchOption.AllDirectories));
+            }
+            // Make sure the root directory is enumerated last so that it comes first in the fallback tree.
+            foreach (var path in Enumerable.Reverse(probingPaths))
             {
-                SetSymbolStore(new DirectorySymbolStore(Tracer.Instance, store, symbolDirectoryPath));
+                if (!IsDuplicateSymbolStore<DirectorySymbolStore>(store, (directorySymbolStore) => IsPathEqual(path, directorySymbolStore.Directory)))
+                {
+                    SetSymbolStore(new DirectorySymbolStore(Tracer.Instance, store, symbolDirectoryPath));
+                    store = _symbolStore;
+                }
             }
         }