Enable VM `_ASSERTE` stack backtrace on Windows (dotnet/coreclr#26782)
authorBruce Forstall <brucefo@microsoft.com>
Fri, 20 Sep 2019 16:45:55 +0000 (09:45 -0700)
committerGitHub <noreply@github.com>
Fri, 20 Sep 2019 16:45:55 +0000 (09:45 -0700)
The stack backtrace code uses ImageHlp and doesn't run on non-Windows platforms.

The PDB files are already being copied to the Helix machines.
Just set `_NT_SYMBOL_PATH` so they can be found.
(This is configured in the VM by the call to SymInitialize in utilcode\stacktrace.cpp,
in particular `FillSymbolSearchPathThrows()`.)

Commit migrated from https://github.com/dotnet/coreclr/commit/a97d193f7ba6d4920b2c9266574d5e32f5838fd6

eng/helixcorefxtests.proj
src/coreclr/tests/helixpublishwitharcade.proj

index 980c5c4..f4da4f4 100644 (file)
     <TestHostRootPath>$(TestWorkingDir)testhost\</TestHostRootPath>
     <TestArchiveRuntimeRoot>$(TestWorkingDir)helix\</TestArchiveRuntimeRoot>
 
+    <!-- The VM PDB symbols for Windows live in the same directory as the VM binaries. Set a relative
+         path within TestHostRootPath (root of the correlation payload) that we can use to set the
+         symbol path for the purpose of getting a good stack trace for debug build VM asserts.
+    -->
+    <TestHostPDBPath>shared\$(MicrosoftNETCoreAppPackage)\$(ProductVersion)</TestHostPDBPath>
+
     <TestAssetBlobFeedUrl>https://dotnetfeed.blob.core.windows.net/dotnet-core</TestAssetBlobFeedUrl>
   </PropertyGroup>
 
     <HelixPreCommand Include="call %__TestEnv%" />
     <!-- Display the interesting COMPlus variables that are set in the environment -->
     <HelixPreCommand Include="set COMPlus" />
+    <!-- Set _NT_SYMBOL_PATH so VM _ASSERTE() asserts can find the symbol files when doing stack walks -->
+    <HelixPreCommand Include="set _NT_SYMBOL_PATH=%HELIX_CORRELATION_PAYLOAD%\$(TestHostPDBPath)" />
   </ItemGroup>
 
   <ItemGroup Condition=" '$(TargetsWindows)' != 'true' ">
index 673c29e..3ab67c3 100644 (file)
 
   <ItemGroup Condition=" '$(TargetsWindows)' == 'true' ">
     <HelixPreCommand Include="set CORE_ROOT=%HELIX_CORRELATION_PAYLOAD%" />
+    <!-- Set _NT_SYMBOL_PATH so VM _ASSERTE() asserts can find the symbol files when doing stack walks -->
+    <HelixPreCommand Include="set _NT_SYMBOL_PATH=%HELIX_CORRELATION_PAYLOAD%\PDB" />
     <HelixPreCommand Include="set RunCrossGen=1" Condition=" '$(RunCrossGen)' == 'true' " />
     <HelixPreCommand Include="set RunningLongGCTests=1" Condition=" '$(LongRunningGCTests)' == 'true' " />
     <HelixPreCommand Include="set RunInUnloadableContext=1" Condition=" '$(RunInUnloadableContext)' == 'true' " />