[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>
Tue, 19 Nov 2024 14:47:35 +0000 (17:47 +0300)
The SOS command 'setsymbolserver -directory' will automatically search
all subdirectories of the specified directory.

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

index 1247620b743d49247b87d2714cac57f8961faa41..474570f37cefae2d36e5e8fc472ac38fd427f19f 100644 (file)
@@ -4,6 +4,7 @@
 using System;
 using System.Collections.Generic;
 using System.Collections.Immutable;
+using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
 using System.Linq;
@@ -396,9 +397,20 @@ namespace Microsoft.Diagnostics.DebugServices.Implementation
             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;
+                }
             }
         }