[Tizen] Search symbol directories recursively (#27)
authorSangwook Kim <swift.kim@samsung.com>
Wed, 22 Apr 2020 09:01:00 +0000 (18:01 +0900)
committerolekarev <o.lekarev@samsung.com>
Fri, 11 Feb 2022 15:07:27 +0000 (18:07 +0300)
The SOS command 'setsymbolserver -directory' will automatically search
all subdirectories of the specified directory.

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

index 35fe3fed19b88838ddaec1f07edf186a466ae858..8a454152e8d26611088430b33f9f03f97127a0ac 100644 (file)
@@ -10,6 +10,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;
@@ -311,9 +312,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;
+                }
             }
         }