[Tizen] Search symbol directories recursively (#27)
authorSangwook Kim <swift.kim@samsung.com>
Wed, 22 Apr 2020 09:01:00 +0000 (18:01 +0900)
committerSangwook Kim <swift.kim@samsung.com>
Wed, 29 Apr 2020 04:34:38 +0000 (13:34 +0900)
The SOS command 'setsymbolserver -directory' will automatically search
all subdirectories of the specified directory.

src/SOS/SOS.NETCore/SymbolReader.cs

index b7af5278a4e52f70b1632cdfea93b4f20a27c1f2..15dccdbf45801f5546f422aac1e651b752e68d0d 100644 (file)
@@ -1183,9 +1183,19 @@ namespace SOS
             {
                 symbolDirectoryPath = Path.GetFullPath(symbolDirectoryPath);
 
-                if (!IsDuplicateSymbolStore<DirectorySymbolStore>(store, (directorySymbolStore) => IsPathEqual(symbolDirectoryPath, directorySymbolStore.Directory)))
+                var probingPaths = new List<string> { symbolDirectoryPath };
+                if (Directory.Exists(symbolDirectoryPath))
                 {
-                    store = new DirectorySymbolStore(s_tracer, store, 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))
+                {
+                    if (!IsDuplicateSymbolStore<DirectorySymbolStore>(store, (directorySymbolStore) => IsPathEqual(path, directorySymbolStore.Directory)))
+                    {
+                        store = new DirectorySymbolStore(s_tracer, store, path);
+                    }
                 }
             }