зеркало из https://github.com/dotnet/diagnostics.git
Add webapp debuggees and more SOS commmand tests (#507)
Add webapp debuggees and more SOS commmand tests Add runtime version to TestConfiguration.ToString() Added WebApp and WebApp3 as prebuilts. Use pipe to sync webapps. "dotnet-dump collect" to collect a dump from these apps. Enable "dbgout" command logging Speed up SOS tests by reworking ScriptLogger removing the .EndsWith on the last command output string. Upgrade to 3.0.100 SDK Switch to prebuilt debuggees except desktop (net462). Add debuggees.sln. Don't optimize debuggees. Add the lldb plugin test python script as an xunit test Publish the dump and bin artifacts on failure Enable triage dump testing. Switch to BYOC pools
This commit is contained in:
Родитель
0800fb2e9e
Коммит
9a0df696f5
|
@ -1,11 +1,17 @@
|
|||
phases:
|
||||
trigger:
|
||||
- master
|
||||
- release/*
|
||||
|
||||
pr:
|
||||
- master
|
||||
- release/*
|
||||
|
||||
jobs:
|
||||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Windows
|
||||
agentOs: Windows_NT
|
||||
queue:
|
||||
name: Hosted VS2017
|
||||
parallel: 2
|
||||
osGroup: Windows_NT
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -17,11 +23,9 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: CentOS_7
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-3e800f1-20190501005343
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
parallel: 2
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -33,10 +37,8 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: MacOS
|
||||
agentOs: Darwin
|
||||
queue:
|
||||
name: Hosted macOS
|
||||
parallel: 2
|
||||
osGroup: MacOS
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
|
|
@ -1,12 +1,21 @@
|
|||
phases:
|
||||
trigger:
|
||||
- master
|
||||
- release/*
|
||||
|
||||
pr:
|
||||
- master
|
||||
- release/*
|
||||
|
||||
jobs:
|
||||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Windows
|
||||
agentOs: Windows_NT
|
||||
queue:
|
||||
name: Hosted VS2017
|
||||
parallel: 4
|
||||
osGroup: Windows_NT
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
_BuildArch: x64
|
||||
Build_Release:
|
||||
_BuildConfig: Release
|
||||
_BuildArch: x64
|
||||
|
@ -23,11 +32,9 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: CentOS_7
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-3e800f1-20190501005343
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
parallel: 2
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -41,11 +48,10 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Linux_cross
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-14.04-cross-1735d26-20190521133857
|
||||
crossrootfsDir: '/crossrootfs/arm'
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Release:
|
||||
_BuildConfig: Release
|
||||
|
@ -55,11 +61,10 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Linux_cross64
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-a3ae44b-20180315221921
|
||||
crossrootfsDir: '/crossrootfs/arm64'
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Release:
|
||||
_BuildConfig: Release
|
||||
|
@ -69,10 +74,9 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Alpine3_6
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.6-WithNode-f4d3fe3-20181220200247
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Release:
|
||||
_BuildConfig: Release
|
||||
|
@ -82,10 +86,8 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: MacOS
|
||||
agentOs: Darwin
|
||||
queue:
|
||||
name: Hosted macOS
|
||||
parallel: 2
|
||||
osGroup: MacOS
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Release:
|
||||
_BuildConfig: Release
|
||||
|
@ -97,12 +99,11 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Debian_Stretch
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:debian-stretch-3e800f1-20190521154431
|
||||
dependsOn: CentOS_7
|
||||
testOnly: true
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -111,12 +112,11 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Fedora_28
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-28-09ca40b-20190508143249
|
||||
dependsOn: CentOS_7
|
||||
testOnly: true
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -125,12 +125,11 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Fedora_29
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-29-09ca40b-20190508143249
|
||||
dependsOn: CentOS_7
|
||||
testOnly: true
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -139,12 +138,11 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: OpenSuse_42_1
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:opensuse-42.1-c103199-20180628122439
|
||||
dependsOn: CentOS_7
|
||||
testOnly: true
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -153,12 +151,11 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: OpenSuse_42_3
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:opensuse-42.3-3e800f1-20190501005344
|
||||
dependsOn: CentOS_7
|
||||
testOnly: true
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -167,12 +164,11 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Ubuntu_14_04
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-14.04-1735d26-20190521133852
|
||||
dependsOn: CentOS_7
|
||||
testOnly: true
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -181,12 +177,11 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Ubuntu_16_04
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-09ca40b-20190520220842
|
||||
dependsOn: CentOS_7
|
||||
testOnly: true
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
@ -195,12 +190,11 @@ phases:
|
|||
- template: /eng/build.yml
|
||||
parameters:
|
||||
name: Ubuntu_18_04
|
||||
agentOs: Linux
|
||||
osGroup: Linux
|
||||
dockerImage: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-3e800f1-20190508143252
|
||||
dependsOn: CentOS_7
|
||||
testOnly: true
|
||||
queue:
|
||||
name: Hosted Ubuntu 1604
|
||||
strategy:
|
||||
matrix:
|
||||
Build_Debug:
|
||||
_BuildConfig: Debug
|
||||
|
|
|
@ -0,0 +1,606 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29019.234
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestDebuggee", "src\SOS\lldbplugin.tests\TestDebuggee\TestDebuggee.csproj", "{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SOS", "SOS", "{41638A4C-0DAF-47ED-A774-ECBBAC0315D7}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{19FAB78C-3351-4911-8F0C-8C6056401740}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debuggees", "Debuggees", "{C3072949-6D24-451B-A308-2F3621F858B0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebApp3", "src\SOS\SOS.UnitTests\Debuggees\WebApp3\WebApp3.csproj", "{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebApp", "src\SOS\SOS.UnitTests\Debuggees\WebApp\WebApp.csproj", "{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleThrow", "src\SOS\SOS.UnitTests\Debuggees\SimpleThrow\SimpleThrow.csproj", "{179EF543-E30A-4428-ABA0-2E2621860173}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DivZero", "src\SOS\SOS.UnitTests\Debuggees\DivZero\DivZero.csproj", "{447AC053-2E0A-4119-BD11-30A4A8E3F765}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GCWhere", "src\SOS\SOS.UnitTests\Debuggees\GCWhere\GCWhere.csproj", "{664F46A9-3C99-489B-AAB9-4CD3A430C425}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NestedExceptionTest", "src\SOS\SOS.UnitTests\Debuggees\NestedExceptionTest\NestedExceptionTest.csproj", "{0CB805C8-0B76-4B1D-8AAF-48535B180448}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Overflow", "src\SOS\SOS.UnitTests\Debuggees\Overflow\Overflow.csproj", "{20251748-AA7B-45BE-ADAA-C9375F5CC80F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReflectionTest", "src\SOS\SOS.UnitTests\Debuggees\ReflectionTest\ReflectionTest.csproj", "{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TaskNestedException", "src\SOS\SOS.UnitTests\Debuggees\TaskNestedException\TaskNestedException\TaskNestedException.csproj", "{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RandomUserLibrary", "src\SOS\SOS.UnitTests\Debuggees\TaskNestedException\RandomUserLibrary\RandomUserLibrary.csproj", "{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SymbolTestApp", "src\SOS\SOS.UnitTests\Debuggees\SymbolTestApp\SymbolTestApp\SymbolTestApp.csproj", "{112FE2A7-3FD2-4496-8A14-171898AD5CF5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SymbolTestDll", "src\SOS\SOS.UnitTests\Debuggees\SymbolTestApp\SymbolTestDll\SymbolTestDll.csproj", "{8C27904A-47C0-44C7-B191-88FF34580CBE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Checked|Any CPU = Checked|Any CPU
|
||||
Checked|ARM = Checked|ARM
|
||||
Checked|ARM64 = Checked|ARM64
|
||||
Checked|x64 = Checked|x64
|
||||
Checked|x86 = Checked|x86
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|ARM64 = Debug|ARM64
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|ARM = Release|ARM
|
||||
Release|ARM64 = Release|ARM64
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
|
||||
RelWithDebInfo|ARM = RelWithDebInfo|ARM
|
||||
RelWithDebInfo|ARM64 = RelWithDebInfo|ARM64
|
||||
RelWithDebInfo|x64 = RelWithDebInfo|x64
|
||||
RelWithDebInfo|x86 = RelWithDebInfo|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|Any CPU.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x86.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x86.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|x64.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.Release|x86.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|x64.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.Release|x86.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|x64.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.Release|x86.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|x64.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.Release|x86.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.Release|x86.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|x64.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.Release|x86.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|ARM.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|ARM.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|ARM64.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|x64.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|x64.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|x86.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Checked|x86.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{41638A4C-0DAF-47ED-A774-ECBBAC0315D7} = {19FAB78C-3351-4911-8F0C-8C6056401740}
|
||||
{C3072949-6D24-451B-A308-2F3621F858B0} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7}
|
||||
{252E5845-8D4C-4306-9D8F-ED2E2F7005F6} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{E7FEA82E-0E16-4868-B122-4B0BC0014E7F} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{179EF543-E30A-4428-ABA0-2E2621860173} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{447AC053-2E0A-4119-BD11-30A4A8E3F765} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{664F46A9-3C99-489B-AAB9-4CD3A430C425} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{0CB805C8-0B76-4B1D-8AAF-48535B180448} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{20251748-AA7B-45BE-ADAA-C9375F5CC80F} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{DDDA69DF-2C4C-477A-B6C9-B4FE73C6E288} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{73EA5188-1E4F-42D8-B63E-F1B878A4EB63} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{B50D14DB-8EE5-47BD-B412-62FA5C693CC7} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{112FE2A7-3FD2-4496-8A14-171898AD5CF5} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
{8C27904A-47C0-44C7-B191-88FF34580CBE} = {C3072949-6D24-451B-A308-2F3621F858B0}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {46465737-C938-44FC-BE1A-4CE139EBB5E0}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -5,8 +5,6 @@ VisualStudioVersion = 16.0.29019.234
|
|||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SOS.NETCore", "src\SOS\SOS.NETCore\SOS.NETCore.csproj", "{20513BA2-A156-4A17-4C70-5AC2DBD4F833}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestDebuggee", "src\SOS\lldbplugin.tests\TestDebuggee\TestDebuggee.csproj", "{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Diagnostics.TestHelpers", "src\Microsoft.Diagnostics.TestHelpers\Microsoft.Diagnostics.TestHelpers.csproj", "{730C1201-1848-4F1E-8C1F-6316FB886C35}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SOS", "SOS", "{41638A4C-0DAF-47ED-A774-ECBBAC0315D7}"
|
||||
|
@ -113,46 +111,6 @@ Global
|
|||
{20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{20513BA2-A156-4A17-4C70-5AC2DBD4F833}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|Any CPU.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|ARM64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x86.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Checked|x86.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|ARM64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
|
||||
{730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|Any CPU.Build.0 = Release|Any CPU
|
||||
{730C1201-1848-4F1E-8C1F-6316FB886C35}.Checked|ARM.ActiveCfg = Release|Any CPU
|
||||
|
@ -256,7 +214,6 @@ Global
|
|||
{D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x64.ActiveCfg = Release|x64
|
||||
{D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x64.Build.0 = Release|x64
|
||||
{D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x86.ActiveCfg = Release|x86
|
||||
{D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.Release|x86.Build.0 = Release|x86
|
||||
{D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
|
||||
{D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
|
||||
{D52C65C4-2C7D-45E6-9F5C-6F3A96796018}.RelWithDebInfo|ARM.ActiveCfg = Release|x64
|
||||
|
@ -809,7 +766,6 @@ Global
|
|||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{20513BA2-A156-4A17-4C70-5AC2DBD4F833} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7}
|
||||
{6C43BE85-F8C3-4D76-8050-F25CE953A7FD} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7}
|
||||
{730C1201-1848-4F1E-8C1F-6316FB886C35} = {19FAB78C-3351-4911-8F0C-8C6056401740}
|
||||
{41638A4C-0DAF-47ED-A774-ECBBAC0315D7} = {19FAB78C-3351-4911-8F0C-8C6056401740}
|
||||
{1532DB3C-7DCD-45C6-B697-62B8378A16A2} = {41638A4C-0DAF-47ED-A774-ECBBAC0315D7}
|
||||
|
|
|
@ -93,7 +93,7 @@ if /i "%1" == "-restore" (set processedArgs=!processedArgs! %1&shift
|
|||
if /i "%1" == "-pack" (set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
|
||||
if /i "%1" == "-publish" (set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
|
||||
if /i "%1" == "-preparemachine" (set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
|
||||
if /i "%1" == "-projects" (set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
|
||||
if /i "%1" == "-projects" (set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
|
||||
|
||||
if [!processedArgs!] == [] (
|
||||
set __UnprocessedBuildArgs=%__args%
|
||||
|
|
|
@ -175,7 +175,7 @@ while :; do
|
|||
__TestArgs="$__TestArgs $1"
|
||||
;;
|
||||
|
||||
--solution)
|
||||
--projects)
|
||||
__TestArgs="$__TestArgs $1 $2"
|
||||
shift
|
||||
;;
|
||||
|
@ -245,7 +245,7 @@ while :; do
|
|||
;;
|
||||
|
||||
# Ignored for a native build
|
||||
--build|--rebuild|--sign|--restore|--pack|--publish|--preparemachine|--projects|--solution)
|
||||
--build|--rebuild|--sign|--restore|--pack|--publish|--preparemachine)
|
||||
;;
|
||||
|
||||
*)
|
||||
|
@ -282,7 +282,6 @@ __ResultsDir=$__RootBinDir/TestResults/$__BuildType
|
|||
__PackagesBinDir=$__RootBinDir/packages/$__BuildType/Shipping
|
||||
__ExtraCmakeArgs="$__ExtraCmakeArgs -DCLR_MANAGED_BINARY_DIR=$__RootBinDir/bin -DCLR_BUILD_TYPE=$__BuildType"
|
||||
__DotNetCli=$__ProjectRoot/.dotnet/dotnet
|
||||
__DotNetRuntimeVersion=2.1.11
|
||||
|
||||
if [ ! -e $__DotNetCli ]; then
|
||||
echo "dotnet cli not installed $__DotNetCli"
|
||||
|
@ -379,6 +378,7 @@ initTargetDistroRid()
|
|||
# Init the target distro name
|
||||
initTargetDistroRid
|
||||
|
||||
|
||||
echo "RID: $__DistroRid"
|
||||
|
||||
if [ "$__HostOS" == "OSX" ]; then
|
||||
|
@ -449,7 +449,7 @@ if [ $__Test == true ]; then
|
|||
if [ $__CrossBuild != true ]; then
|
||||
|
||||
# Install the other versions of .NET Core runtime we are going to test on
|
||||
"$__ProjectRoot/eng/install-test-runtimes.sh" --dotnet-directory "$__ProjectRoot/.dotnet" --runtime-version-21 "$__DotNetRuntimeVersion" --temp-directory "$__IntermediatesDir" --architecture "$__BuildArch" $__DailyTest
|
||||
"$__ProjectRoot/eng/install-test-runtimes.sh" --dotnet-directory "$__ProjectRoot/.dotnet" --temp-directory "$__IntermediatesDir" --architecture "$__BuildArch" $__DailyTest
|
||||
|
||||
if [ "$LLDB_PATH" == "" ]; then
|
||||
export LLDB_PATH="$(which lldb-3.9.1 2> /dev/null)"
|
||||
|
@ -478,21 +478,6 @@ if [ $__Test == true ]; then
|
|||
if [ $? != 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Skip Alpine because lldb doesn't work
|
||||
if [ $__Alpine == false ]; then
|
||||
if [ "$__BuildOS" == "OSX" ]; then
|
||||
__Plugin=$__CMakeBinDir/libsosplugin.dylib
|
||||
else
|
||||
__Plugin=$__CMakeBinDir/libsosplugin.so
|
||||
fi
|
||||
|
||||
# Run lldb python tests
|
||||
"$__ProjectRoot/src/SOS/lldbplugin.tests/testsos.sh" "$__ProjectRoot" "$__Plugin" "$__DotNetRuntimeVersion" "$__RootBinDir/bin/TestDebuggee/$__BuildType/netcoreapp2.0/TestDebuggee.dll" "$__ResultsDir"
|
||||
if [ $? != 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
207
eng/build.yml
207
eng/build.yml
|
@ -1,93 +1,126 @@
|
|||
# build.yml
|
||||
# Description: Defines the build phase
|
||||
# Parameters:
|
||||
# agentOs: [Windows_NT (default), Linux, OSX] Used in templates to define variables which are OS specific
|
||||
# dockerImage: If defined, specifies docker image to run build steps in
|
||||
# matrix: build matrix
|
||||
# enableTelemetry: send telemetry if build is not a PR or CI build
|
||||
# queue YAML object - https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-schema.md#queue
|
||||
# variables YAML object - https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-schema.md#phase
|
||||
|
||||
parameters:
|
||||
# Job name
|
||||
name: ''
|
||||
agentOs: Windows_NT
|
||||
dockerImage: ''
|
||||
crossrootfsDir: ''
|
||||
testOnly: false
|
||||
dependsOn: ''
|
||||
# send telemetry
|
||||
enableTelemetry: true
|
||||
# install Microbuild plugin if not a public build
|
||||
enableMicrobuild: true
|
||||
# queue YAML object - https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-schema.md#queue
|
||||
queue: {}
|
||||
# variables YAML object - https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-schema.md#phase
|
||||
|
||||
# Agent OS (Windows_NT, Linux, MacOS, FreeBSD)
|
||||
osGroup: Windows_NT
|
||||
|
||||
# Additional variables
|
||||
variables: {}
|
||||
|
||||
# Common conditionals: There are a number of common conditionals that are useful. Generally these are used to decide what resources can be accessed,
|
||||
# or what logic should be applied based on the context the build is being run in.
|
||||
# - eq/ne(variables['Agent.Os'], 'Windows_NT') - Running/not running on a windows machine
|
||||
# - eq/ne(variables['System.TeamProject'], 'public') - Running/not running on the dotnet public VSTS project
|
||||
# - and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest') - Not running in public and not a pull request.
|
||||
# - or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest') - Running in public or a pull request.
|
||||
# Build strategy - matrix
|
||||
strategy: ''
|
||||
|
||||
phases:
|
||||
- template: /eng/common/templates/phases/base.yml
|
||||
# Optional: Job timeout
|
||||
timeoutInMinutes: 180
|
||||
|
||||
# Optional: Docker image to use
|
||||
dockerImage: ''
|
||||
|
||||
# Optional: ROOTFS_DIR to use
|
||||
crossrootfsDir: ''
|
||||
|
||||
# Optional: test only job if true
|
||||
testOnly: false
|
||||
|
||||
# Depends on
|
||||
dependsOn: ''
|
||||
|
||||
jobs:
|
||||
- template: /eng/common/templates/job/job.yml
|
||||
parameters:
|
||||
enableTelemetry: ${{ parameters.enableTelemetry }}
|
||||
enableMicrobuild: ${{ parameters.enableMicrobuild }}
|
||||
name: ${{ parameters.name }}
|
||||
agentOs: ${{ parameters.agentOs }}
|
||||
dependsOn: ${{ parameters.dependsOn }}
|
||||
queue: ${{ parameters.queue }}
|
||||
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
|
||||
enableMicrobuild: true
|
||||
enableTelemetry: true
|
||||
helixRepo: dotnet/sdk
|
||||
|
||||
pool:
|
||||
# Public Linux Build Pool
|
||||
${{ if and(eq(parameters.osGroup, 'Linux'), eq(variables['System.TeamProject'], 'public')) }}:
|
||||
name: NetCorePublic-Pool
|
||||
queue: BuildPool.Ubuntu.1604.Amd64.Open
|
||||
|
||||
# Official Build Linux Pool
|
||||
${{ if and(eq(parameters.osGroup, 'Linux'), ne(variables['System.TeamProject'], 'public')) }}:
|
||||
name: NetCoreInternal-Pool
|
||||
queue: BuildPool.Ubuntu.1604.Amd64
|
||||
|
||||
# FreeBSD builds only in the internal project
|
||||
${{ if and(eq(parameters.osGroup, 'FreeBSD'), ne(variables['System.TeamProject'], 'public')) }}:
|
||||
name: dnceng-freebsd-internal
|
||||
|
||||
# Public OSX Build Pool
|
||||
${{ if and(eq(parameters.osGroup, 'MacOS'), ne(variables['System.TeamProject'], 'public')) }}:
|
||||
name: Hosted Mac Internal
|
||||
|
||||
# Official Build OSX Pool
|
||||
${{ if and(eq(parameters.osGroup, 'MacOS'), eq(variables['System.TeamProject'], 'public')) }}:
|
||||
name: Hosted MacOS
|
||||
|
||||
# Official Build Windows Pool
|
||||
${{ if and(eq(parameters.osGroup, 'Windows_NT'), ne(variables['System.TeamProject'], 'public')) }}:
|
||||
name: NetCoreInternal-Pool
|
||||
queue: BuildPool.Windows.10.Amd64.VS2017
|
||||
|
||||
# Public Windows Build Pool
|
||||
${{ if and(eq(parameters.osGroup, 'Windows_NT'), eq(variables['System.TeamProject'], 'public')) }}:
|
||||
name: NetCorePublic-Pool
|
||||
queue: BuildPool.Windows.10.Amd64.VS2017.Open
|
||||
|
||||
${{ if ne(parameters.strategy, '') }}:
|
||||
strategy: ${{ parameters.strategy }}
|
||||
|
||||
${{ if ne(parameters.dependsOn, '') }}:
|
||||
dependsOn: ${{ parameters.dependsOn }}
|
||||
|
||||
workspace:
|
||||
clean: all
|
||||
|
||||
variables:
|
||||
${{ insert }}: ${{ parameters.variables }}
|
||||
_PortableLinuxBuild: CentOS_7_$(_BuildArch)_$(_BuildConfig)
|
||||
_DockerImageName: ${{ parameters.dockerImage }}
|
||||
_PhaseName : ${{ parameters.name }}
|
||||
_HelixType: build/product
|
||||
_HelixBuildConfig: $(_BuildConfig)
|
||||
- ${{ insert }}: ${{ parameters.variables }}
|
||||
- _PortableLinuxBuild: CentOS_7_$(_BuildArch)_$(_BuildConfig)
|
||||
- _DockerImageName: ${{ parameters.dockerImage }}
|
||||
- _PhaseName : ${{ parameters.name }}
|
||||
- _HelixType: build/product
|
||||
- _HelixBuildConfig: $(_BuildConfig)
|
||||
|
||||
# Only enable publishing in non-public, non PR scenarios.
|
||||
${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
|
||||
_HelixSource: official/dotnet/arcade/$(Build.SourceBranch)
|
||||
${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
|
||||
_HelixSource: pr/dotnet/arcade/$(Build.SourceBranch)
|
||||
# Only enable publishing in non-public, non PR scenarios.
|
||||
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
|
||||
- _HelixSource: official/dotnet/arcade/$(Build.SourceBranch)
|
||||
- ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
|
||||
- _HelixSource: pr/dotnet/arcade/$(Build.SourceBranch)
|
||||
|
||||
${{ if eq(parameters.testOnly, 'true') }}:
|
||||
_LinuxScript: $(Build.SourcesDirectory)/eng/citest.sh
|
||||
${{ if ne(parameters.testOnly, 'true') }}:
|
||||
_LinuxScript: $(Build.SourcesDirectory)/eng/cibuild.sh
|
||||
- ${{ if eq(parameters.testOnly, 'true') }}:
|
||||
- _LinuxScript: $(Build.SourcesDirectory)/eng/citest.sh
|
||||
- ${{ if ne(parameters.testOnly, 'true') }}:
|
||||
- _LinuxScript: $(Build.SourcesDirectory)/eng/cibuild.sh
|
||||
|
||||
${{ if eq(variables['Build.Reason'], 'Schedule') }}:
|
||||
${{ if eq(parameters.agentOs, 'Windows_NT') }}:
|
||||
_DailyTest: -daily-test
|
||||
${{ if ne(parameters.agentOs, 'Windows_NT') }}:
|
||||
_DailyTest: --daily-test
|
||||
${{ if ne(variables['Build.Reason'], 'Schedule') }}:
|
||||
_DailyTest: ''
|
||||
- ${{ if eq(variables['Build.Reason'], 'Schedule') }}:
|
||||
- ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
|
||||
- _DailyTest: -daily-test
|
||||
- ${{ if ne(parameters.osGroup, 'Windows_NT') }}:
|
||||
- _DailyTest: --daily-test
|
||||
- ${{ if ne(variables['Build.Reason'], 'Schedule') }}:
|
||||
- _DailyTest: ''
|
||||
|
||||
${{ if eq(parameters.crossrootfsDir, '') }}:
|
||||
_RootFs: ''
|
||||
# This is only required for cross builds.
|
||||
${{ if ne(parameters.crossrootfsDir, '') }}:
|
||||
_RootFs: --rootfs ${{ parameters.crossrootfsDir }}
|
||||
# This is only required for cross builds.
|
||||
- ${{ if eq(parameters.crossrootfsDir, '') }}:
|
||||
- _RootFs: ''
|
||||
- ${{ if ne(parameters.crossrootfsDir, '') }}:
|
||||
- _RootFs: --rootfs ${{ parameters.crossrootfsDir }}
|
||||
|
||||
steps:
|
||||
- template: /eng/common/templates/steps/run-on-windows.yml
|
||||
parameters:
|
||||
agentOs: ${{ parameters.agentOs }}
|
||||
steps:
|
||||
- script: $(Build.SourcesDirectory)\eng\cibuild.cmd $(_DailyTest)
|
||||
-configuration $(_BuildConfig)
|
||||
-architecture $(_BuildArch)
|
||||
-prepareMachine
|
||||
/p:OfficialBuildId=$(BUILD.BUILDNUMBER)
|
||||
displayName: Build / Test
|
||||
condition: succeeded()
|
||||
- ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
|
||||
- script: $(Build.SourcesDirectory)\eng\cibuild.cmd $(_DailyTest)
|
||||
-configuration $(_BuildConfig)
|
||||
-architecture $(_BuildArch)
|
||||
-prepareMachine
|
||||
/p:OfficialBuildId=$(BUILD.BUILDNUMBER)
|
||||
displayName: Build / Test
|
||||
condition: succeeded()
|
||||
|
||||
- ${{ if eq(parameters.agentOs, 'Linux') }}:
|
||||
- ${{ if eq(parameters.osGroup, 'Linux') }}:
|
||||
- ${{ if eq(parameters.testOnly, 'true') }}:
|
||||
- task: DownloadBuildArtifacts@0
|
||||
displayName: Download Linux-x64 Artifacts
|
||||
|
@ -116,7 +149,7 @@ phases:
|
|||
displayName: Docker Build / Test
|
||||
condition: succeeded()
|
||||
|
||||
- ${{ if eq(parameters.agentOs, 'Darwin') }}:
|
||||
- ${{ if eq(parameters.osGroup, 'MacOS') }}:
|
||||
- script: $(Build.SourcesDirectory)/eng/cibuild.sh $(_DailyTest)
|
||||
--configuration $(_BuildConfig)
|
||||
--architecture $(_BuildArch)
|
||||
|
@ -126,14 +159,32 @@ phases:
|
|||
condition: succeeded()
|
||||
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: Upload Artifacts
|
||||
displayName: Publish Build Artifacts
|
||||
inputs:
|
||||
pathtoPublish: '$(Build.SourcesDirectory)/artifacts/$(_PublishArtifacts)'
|
||||
artifactName: $(_PhaseName)_$(_BuildArch)_$(_BuildConfig)
|
||||
condition: ne(variables['_PublishArtifacts'], '')
|
||||
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: Publish Artifacts on failure
|
||||
inputs:
|
||||
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/bin'
|
||||
PublishLocation: Container
|
||||
ArtifactName: Artifacts_$(_PhaseName)_$(_BuildArch)_$(_BuildConfig)
|
||||
continueOnError: true
|
||||
condition: failed()
|
||||
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: Publish Dump Artifacts on failure
|
||||
inputs:
|
||||
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
|
||||
PublishLocation: Container
|
||||
ArtifactName: Dumps_$(_PhaseName)_$(_BuildArch)_$(_BuildConfig)
|
||||
continueOnError: true
|
||||
condition: failed()
|
||||
|
||||
- task: CopyFiles@2
|
||||
displayName: Gather Build Logs
|
||||
displayName: Gather Logs
|
||||
inputs:
|
||||
sourceFolder: '$(Build.SourcesDirectory)/artifacts'
|
||||
contents: '?(log|TestResults)/**'
|
||||
|
@ -142,7 +193,7 @@ phases:
|
|||
condition: always()
|
||||
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: Publish Logs to VSTS
|
||||
displayName: Publish Logs
|
||||
inputs:
|
||||
PathtoPublish: '$(Build.StagingDirectory)/BuildLogs'
|
||||
PublishLocation: Container
|
||||
|
|
|
@ -12,23 +12,28 @@ Set-StrictMode -Version Latest
|
|||
$ErrorActionPreference="Stop"
|
||||
|
||||
$RuntimeVersion11="1.1.13"
|
||||
$RuntimeVersion21="2.1.11"
|
||||
$RuntimeVersion22="2.2.5"
|
||||
$RuntimeVersion21="2.1.12"
|
||||
$RuntimeVersion22="2.2.6"
|
||||
$RuntimeVersion30="3.0.0"
|
||||
$AspNetCoreVersion30="3.0.0"
|
||||
$DailyTestText="true"
|
||||
|
||||
# Always install 2.1 for the daily test (scheduled builds) scenario because xunit needs it
|
||||
. $DotNetDir\dotnet-install.ps1 -Version $RuntimeVersion21 -Architecture $BuildArch -SkipNonVersionedFiles -Runtime dotnet -InstallDir $DotNetDir
|
||||
. $DotNetDir\dotnet-install.ps1 -Version $RuntimeVersion21 -Architecture $BuildArch -SkipNonVersionedFiles -Runtime aspnetcore -InstallDir $DotNetDir
|
||||
|
||||
# Install the other versions of .NET Core runtime we are going to test. 1.1.x, 2.1.x, 2.2.x
|
||||
# Install the other versions of .NET Core runtime we are going to test. 1.1.x, 2.1.x, 2.2.x, 3.0.x
|
||||
# and latest. Only install the latest master for daily jobs and leave the RuntimeVersion*
|
||||
# config properties blank.
|
||||
if (!$DailyTest) {
|
||||
$DailyTestText="false"
|
||||
. $DotNetDir\dotnet-install.ps1 -Version $RuntimeVersion11 -Architecture $BuildArch -SkipNonVersionedFiles -Runtime dotnet -InstallDir $DotNetDir
|
||||
. $DotNetDir\dotnet-install.ps1 -Version $RuntimeVersion22 -Architecture $BuildArch -SkipNonVersionedFiles -Runtime dotnet -InstallDir $DotNetDir
|
||||
. $DotNetDir\dotnet-install.ps1 -Version $RuntimeVersion22 -Architecture $BuildArch -SkipNonVersionedFiles -Runtime aspnetcore -InstallDir $DotNetDir
|
||||
}
|
||||
|
||||
. $DotNetDir\dotnet-install.ps1 -Channel $Branch -Version latest -Architecture $BuildArch -SkipNonVersionedFiles -Runtime dotnet -InstallDir $DotNetDir
|
||||
. $DotNetDir\dotnet-install.ps1 -Channel $Branch -Version latest -Architecture $BuildArch -SkipNonVersionedFiles -Runtime aspnetcore -InstallDir $DotNetDir
|
||||
|
||||
# Now download the latest runtime version and create a config file containing it
|
||||
$VersionFileUrl = "$UncachedFeed/Runtime/$Branch/latest.version"
|
||||
|
@ -42,13 +47,15 @@ if (Test-Path $VersionFile) {
|
|||
$Data = @($VersionText.Split([char[]]@(), [StringSplitOptions]::RemoveEmptyEntries));
|
||||
$RuntimeVersionLatest = $Data[1].Trim()
|
||||
|
||||
Write-Host "Latest version: $RuntimeVersionLatest"
|
||||
Write-Host "Latest $Branch version: $RuntimeVersionLatest"
|
||||
|
||||
'<Configuration>
|
||||
<DailyTest>' + $DailyTestText +'</DailyTest>
|
||||
<RuntimeVersion11>' + $RuntimeVersion11 + '</RuntimeVersion11>
|
||||
<RuntimeVersion21>' + $RuntimeVersion21 + '</RuntimeVersion21>
|
||||
<RuntimeVersion22>' + $RuntimeVersion22 + '</RuntimeVersion22>
|
||||
<RuntimeVersion30>' + $RuntimeVersion30 + '</RuntimeVersion30>
|
||||
<AspNetCoreVersion30>' + $AspNetCoreVersion30 + '</AspNetCoreVersion30>
|
||||
<RuntimeVersionLatest>' + $RuntimeVersionLatest + '</RuntimeVersionLatest>
|
||||
</Configuration>' | Set-Content $ConfigFile
|
||||
|
||||
|
|
|
@ -10,8 +10,10 @@ branch="master"
|
|||
uncached_feed="https://dotnetcli.blob.core.windows.net/dotnet"
|
||||
|
||||
runtime_version_11="1.1.13"
|
||||
runtime_version_21=
|
||||
runtime_version_22="2.2.5"
|
||||
runtime_version_21="2.1.12"
|
||||
runtime_version_22="2.2.6"
|
||||
runtime_version_30="3.0.0"
|
||||
aspnetcore_version_30="3.0.0"
|
||||
|
||||
while [ $# -ne 0 ]; do
|
||||
name=$1
|
||||
|
@ -20,10 +22,6 @@ while [ $# -ne 0 ]; do
|
|||
shift
|
||||
dotnet_dir=$1
|
||||
;;
|
||||
--runtime-version-21)
|
||||
shift
|
||||
runtime_version_21=$1
|
||||
;;
|
||||
--temp-directory)
|
||||
shift
|
||||
temp_dir=$1
|
||||
|
@ -51,7 +49,7 @@ daily_test_text="true"
|
|||
# Always install 2.1 for the daily test (scheduled builds) scenario because xunit needs it
|
||||
bash "$dotnet_dir/dotnet-install.sh" --version "$runtime_version_21" --architecture "$build_arch" --skip-non-versioned-files --runtime dotnet --install-dir "$dotnet_dir"
|
||||
|
||||
# Install the other versions of .NET Core runtime we are going to test. 1.1.x, 2.1.x, 2.2.x
|
||||
# Install the other versions of .NET Core runtime we are going to test. 1.1.x, 2.1.x, 2.2.x, 3.0.x
|
||||
# and latest. Only install the latest master for daily jobs and leave the RuntimeVersion*
|
||||
# config properties blank.
|
||||
if [ $daily_test == 0 ]; then
|
||||
|
@ -61,6 +59,7 @@ if [ $daily_test == 0 ]; then
|
|||
fi
|
||||
|
||||
bash "$dotnet_dir/dotnet-install.sh" --channel $branch --version latest --architecture "$build_arch" --skip-non-versioned-files --runtime dotnet --install-dir "$dotnet_dir"
|
||||
bash "$dotnet_dir/dotnet-install.sh" --channel $branch --version latest --architecture "$build_arch" --skip-non-versioned-files --runtime aspnetcore --install-dir "$dotnet_dir"
|
||||
|
||||
# Now download the latest runtime version and create a config file containing it
|
||||
version_file_url="$uncached_feed/Runtime/$branch/latest.version"
|
||||
|
@ -75,15 +74,17 @@ else
|
|||
fi
|
||||
|
||||
if [ -f "$version_file" ]; then
|
||||
runtime_version_latest=$(cat $version_file | tail -n 1 | sed 's/\r$//')
|
||||
runtime_version_latest=$(cat $version_file | tail -n 1 | tr -d "\r")
|
||||
|
||||
echo "Latest version: $runtime_version_latest"
|
||||
echo "Latest $branch version: '$runtime_version_latest'"
|
||||
|
||||
echo "<Configuration>
|
||||
<DailyTest>$daily_test_text</DailyTest>
|
||||
<RuntimeVersion11>$runtime_version_11</RuntimeVersion11>
|
||||
<RuntimeVersion21>$runtime_version_21</RuntimeVersion21>
|
||||
<RuntimeVersion22>$runtime_version_22</RuntimeVersion22>
|
||||
<RuntimeVersion30>$runtime_version_30</RuntimeVersion30>
|
||||
<AspNetCoreVersion30>$aspnetcore_version_30</AspNetCoreVersion30>
|
||||
<RuntimeVersionLatest>$runtime_version_latest</RuntimeVersionLatest>
|
||||
</Configuration>" > $config_file
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"sdk": {
|
||||
"version": "3.0.100-preview6-012264"
|
||||
"version": "3.0.100"
|
||||
},
|
||||
"tools": {
|
||||
"dotnet": "3.0.100-preview6-012264"
|
||||
"dotnet": "3.0.100"
|
||||
},
|
||||
"msbuild-sdks": {
|
||||
"Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19309.1"
|
||||
|
|
|
@ -17,11 +17,11 @@
|
|||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(TargetFramework)' == 'net461'">
|
||||
<PropertyGroup Condition="'$(TargetFramework)' == 'net462'">
|
||||
<DebugType>full</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(TargetFramework)' != 'net461'">
|
||||
<PropertyGroup Condition="'$(TargetFramework)' != 'net462'">
|
||||
<DebugType>portable</DebugType>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -81,6 +81,12 @@ namespace Microsoft.Diagnostics.Repl
|
|||
m_interactiveConsole = !Console.IsInputRedirected;
|
||||
RefreshLine();
|
||||
|
||||
// The special prompts for the test runner are built into this
|
||||
// console provider when the output has been redirected.
|
||||
if (!m_interactiveConsole) {
|
||||
WriteLine(OutputType.Normal, "<END_COMMAND_OUTPUT>");
|
||||
}
|
||||
|
||||
// Start keyboard processing
|
||||
while (!m_shutdown) {
|
||||
if (m_interactiveConsole)
|
||||
|
@ -91,12 +97,20 @@ namespace Microsoft.Diagnostics.Repl
|
|||
else
|
||||
{
|
||||
// The input has been redirected (i.e. testing or in script)
|
||||
WriteLine(OutputType.Normal, "<END_COMMAND_OUTPUT>");
|
||||
string line = Console.ReadLine();
|
||||
if (string.IsNullOrEmpty(line)) {
|
||||
continue;
|
||||
}
|
||||
await Dispatch(line, dispatchCommand);
|
||||
bool result = await Dispatch(line, dispatchCommand);
|
||||
if (!m_shutdown)
|
||||
{
|
||||
if (result) {
|
||||
WriteLine(OutputType.Normal, "<END_COMMAND_OUTPUT>");
|
||||
}
|
||||
else {
|
||||
WriteLine(OutputType.Normal, "<END_COMMAND_ERROR>");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -410,8 +424,9 @@ namespace Microsoft.Diagnostics.Repl
|
|||
}
|
||||
}
|
||||
|
||||
private async Task Dispatch(string newCommand, Func<string, CancellationToken, Task> dispatchCommand)
|
||||
private async Task<bool> Dispatch(string newCommand, Func<string, CancellationToken, Task> dispatchCommand)
|
||||
{
|
||||
bool result = true;
|
||||
CommandStarting();
|
||||
m_interruptExecutingCommand = new CancellationTokenSource();
|
||||
try
|
||||
|
@ -435,6 +450,7 @@ namespace Microsoft.Diagnostics.Repl
|
|||
{
|
||||
WriteLine(OutputType.Error, "ERROR: {0}", ex.Message);
|
||||
m_lastCommandLine = null;
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
@ -442,6 +458,7 @@ namespace Microsoft.Diagnostics.Repl
|
|||
m_interruptExecutingCommand = null;
|
||||
CommandFinished();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void AppendNewText(string text)
|
||||
|
|
|
@ -122,6 +122,10 @@ namespace Microsoft.Diagnostics.TestHelpers
|
|||
|
||||
protected static string GetDebuggeeNativeLibDirPath(TestConfiguration config, string debuggeeName)
|
||||
{
|
||||
if (config.DebuggeeNativeLibRoot == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return Path.Combine(config.DebuggeeNativeLibRoot, debuggeeName);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,20 +16,24 @@ namespace Microsoft.Diagnostics.TestHelpers
|
|||
{
|
||||
async public static Task<DebuggeeConfiguration> Execute(TestConfiguration config, string debuggeeName, ITestOutputHelper output)
|
||||
{
|
||||
IDebuggeeCompiler compiler = null;
|
||||
if (config.DebuggeeBuildProcess == "prebuilt")
|
||||
IDebuggeeCompiler compiler;
|
||||
switch (config.DebuggeeBuildProcess)
|
||||
{
|
||||
compiler = new PrebuiltDebuggeeCompiler(config, debuggeeName);
|
||||
case "prebuilt":
|
||||
// Backwards compatibility for the diagnostics test repo
|
||||
compiler = new PrebuiltDebuggeeCompiler(config, debuggeeName);
|
||||
break;
|
||||
case "sdk.prebuilt":
|
||||
// The .NET Core SDK layout
|
||||
compiler = new SdkPrebuiltDebuggeeCompiler(config, debuggeeName);
|
||||
break;
|
||||
case "cli":
|
||||
// Builds the debuggee with the .NET Core CLI
|
||||
compiler = new CliDebuggeeCompiler(config, debuggeeName);
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Invalid DebuggeeBuildProcess configuration value. Expected 'prebuilt', actual \'" + config.DebuggeeBuildProcess + "\'");
|
||||
}
|
||||
else if (config.DebuggeeBuildProcess == "cli")
|
||||
{
|
||||
compiler = new CliDebuggeeCompiler(config, debuggeeName);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Invalid DebuggeeBuildProcess configuration value. Expected 'prebuilt', actual \'" + config.DebuggeeBuildProcess + "\'");
|
||||
}
|
||||
|
||||
return await compiler.Execute(output);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Microsoft.Diagnostics.TestHelpers
|
||||
{
|
||||
public class SdkPrebuiltDebuggeeCompiler : IDebuggeeCompiler
|
||||
{
|
||||
readonly string _sourcePath;
|
||||
readonly string _binaryPath;
|
||||
readonly string _binaryExePath;
|
||||
|
||||
public SdkPrebuiltDebuggeeCompiler(TestConfiguration config, string debuggeeName)
|
||||
{
|
||||
// The layout is how the current .NET Core SDK layouts the binaries out:
|
||||
// Source Path: <DebuggeeSourceRoot>/<DebuggeeName>/[<DebuggeeName>]
|
||||
// Binary Path: <DebuggeeBuildRoot>/bin/<DebuggeeName>/<TargetConfiguration>/<BuildProjectFramework>
|
||||
// Binary Exe Path: <DebuggeeBuildRoot>/bin/<DebuggeeName>/<TargetConfiguration>/<BuildProjectFramework>/<DebuggeeName>.dll
|
||||
_sourcePath = Path.Combine(config.DebuggeeSourceRoot, debuggeeName);
|
||||
if (Directory.Exists(Path.Combine(_sourcePath, debuggeeName)))
|
||||
{
|
||||
_sourcePath = Path.Combine(_sourcePath, debuggeeName);
|
||||
}
|
||||
_binaryPath = Path.Combine(config.DebuggeeBuildRoot, "bin", debuggeeName, config.TargetConfiguration, config.BuildProjectFramework);
|
||||
_binaryExePath = Path.Combine(_binaryPath, debuggeeName) + (config.IsDesktop ? ".exe" : ".dll");
|
||||
}
|
||||
|
||||
public Task<DebuggeeConfiguration> Execute(ITestOutputHelper output)
|
||||
{
|
||||
return Task.Factory.StartNew<DebuggeeConfiguration>(() => new DebuggeeConfiguration(_sourcePath, _binaryPath, _binaryExePath));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -284,18 +284,23 @@ namespace Microsoft.Diagnostics.TestHelpers
|
|||
get { return _settings; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new test config with the new PDB type (full, portable or embedded)
|
||||
/// </summary>
|
||||
/// <param name="pdbType">new pdb type</param>
|
||||
/// <returns>new test config</returns>
|
||||
public TestConfiguration CloneWithNewDebugType(string pdbType)
|
||||
{
|
||||
Debug.Assert(!string.IsNullOrWhiteSpace(pdbType));
|
||||
|
||||
var currentSettings = new Dictionary<string, string>(_settings);
|
||||
var currentSettings = new Dictionary<string, string>(_settings) {
|
||||
|
||||
// Set or replace if the pdb debug type
|
||||
currentSettings[DebugTypeKey] = pdbType;
|
||||
|
||||
// The debuggee build root must exist. Append the pdb type to make it unique.
|
||||
currentSettings[DebuggeeBuildRootKey] = Path.Combine(currentSettings[DebuggeeBuildRootKey], pdbType);
|
||||
// Set or replace if the pdb debug type
|
||||
[DebugTypeKey] = pdbType,
|
||||
|
||||
// The debuggee build root must exist. Append the pdb type to make it unique.
|
||||
[DebuggeeBuildRootKey] = Path.Combine(_settings[DebuggeeBuildRootKey], pdbType)
|
||||
};
|
||||
return new TestConfiguration(currentSettings);
|
||||
}
|
||||
|
||||
|
@ -649,7 +654,17 @@ namespace Microsoft.Diagnostics.TestHelpers
|
|||
|
||||
public override string ToString()
|
||||
{
|
||||
return TestProduct + "." + DebuggeeBuildProcess;
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(TestProduct);
|
||||
sb.Append(".");
|
||||
sb.Append(DebuggeeBuildProcess);
|
||||
string version = RuntimeFrameworkVersion;
|
||||
if (!string.IsNullOrEmpty(version))
|
||||
{
|
||||
sb.Append(".");
|
||||
sb.Append(version);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -669,9 +669,27 @@ namespace SOS
|
|||
uint* index,
|
||||
ulong* baseAddress)
|
||||
{
|
||||
Write(index);
|
||||
Write(baseAddress);
|
||||
return E_NOTIMPL;
|
||||
Debug.Assert(startIndex == 0);
|
||||
|
||||
// This causes way too many problems on Linux because of various
|
||||
// bugs in the CLRMD ELF dump reader module enumeration and isn't
|
||||
// necessary on linux anyway.
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
// Find the module that contains the offset.
|
||||
uint i = 0;
|
||||
foreach (ModuleInfo module in DataReader.EnumerateModules())
|
||||
{
|
||||
if (offset >= module.ImageBase && offset < (module.ImageBase + module.FileSize))
|
||||
{
|
||||
Write(index, i);
|
||||
Write(baseAddress, module.ImageBase);
|
||||
return S_OK;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
internal unsafe int GetModuleNames(
|
||||
|
|
|
@ -20,9 +20,8 @@
|
|||
<DumpDir>$(RootBinDir)/tmp/$(TargetConfiguration)\dumps</DumpDir>
|
||||
|
||||
<DebuggeeSourceRoot>$(RepoRootDir)/src/SOS/SOS.UnitTests/Debuggees</DebuggeeSourceRoot>
|
||||
<DebuggeeBuildRoot>$(RootBinDir)/Debuggees</DebuggeeBuildRoot>
|
||||
<DebuggeeNativeLibRoot>$(DebuggeeBuildRoot)/native</DebuggeeNativeLibRoot>
|
||||
<DebuggeeBuildProcess>cli</DebuggeeBuildProcess>
|
||||
<DebuggeeBuildProcess>sdk.prebuilt</DebuggeeBuildProcess>
|
||||
<DebuggeeBuildRoot>$(RootBinDir)</DebuggeeBuildRoot>
|
||||
<CliPath>$(RepoRootDir)/.dotnet/dotnet</CliPath>
|
||||
|
||||
<NuGetPackageFeeds>
|
||||
|
@ -31,32 +30,84 @@
|
|||
</NuGetPackageFeeds>
|
||||
|
||||
<Options>
|
||||
<!--
|
||||
Default (prebuilt)
|
||||
-->
|
||||
<Option>
|
||||
<!-- Build the debuggee for 2.1 but run it on latest -->
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion21)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<!-- The debuggee built for 3.0 but run it on latest -->
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersionLatest)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option>
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion30)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<!-- Build the debuggee for 2.1 but run it on 2.2 -->
|
||||
<!-- The debuggee built for 2.1 but run it on 2.2 -->
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion22)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion22)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion21)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion21)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="Exists('$(RepoRootDir)/.dotnet/shared/Microsoft.NETCore.App/$(RuntimeVersion11)')">
|
||||
<BuildProjectFramework>netcoreapp1.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion11)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion11)</RuntimeFrameworkVersion>
|
||||
<!-- createdump doesn't exists in 1.1 -->
|
||||
<GenerateDumpWithGDB>true</GenerateDumpWithGDB>
|
||||
<!-- SOS needs at least 2.0 to run. The default without this is to use the runtime being debuggged to host SOS.NETCore -->
|
||||
<SOSHostRuntime>$(RepoRootDir)/.dotnet/shared/Microsoft.NETCore.App/$(RuntimeVersion21)</SOSHostRuntime>
|
||||
</Option>
|
||||
<!--
|
||||
SOS.StackAndOtherTests (cli because tested with embedded and portable PDBs)
|
||||
-->
|
||||
<Option>
|
||||
<DebuggeeBuildProcess>cli</DebuggeeBuildProcess>
|
||||
<DebuggeeBuildRoot>$(RootBinDir)/Debuggees</DebuggeeBuildRoot>
|
||||
<TestName>SOS.StackAndOtherTests</TestName>
|
||||
<Options>
|
||||
<Option>
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion30)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion30)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option>
|
||||
<!-- Build the debuggee for 3.0 but run it on latest -->
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion30)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersionLatest)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion21)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion21)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<!-- The debuggee built for 2.1 but run it on 2.2 -->
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion21)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion22)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="Exists('$(RepoRootDir)/.dotnet/shared/Microsoft.NETCore.App/$(RuntimeVersion11)')">
|
||||
<BuildProjectFramework>netcoreapp1.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion11)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion11)</RuntimeFrameworkVersion>
|
||||
<!-- createdump doesn't exists in 1.1 -->
|
||||
<GenerateDumpWithGDB>true</GenerateDumpWithGDB>
|
||||
<!-- SOS needs at least 2.0 to run. The default without this is to use the runtime being debuggged to host SOS.NETCore -->
|
||||
<SOSHostRuntime>$(RepoRootDir)/.dotnet/shared/Microsoft.NETCore.App/$(RuntimeVersion21)</SOSHostRuntime>
|
||||
</Option>
|
||||
</Options>
|
||||
</Option>
|
||||
<!--
|
||||
SOS.WebApp3 (runs only on 3.0 aspnetcore)
|
||||
-->
|
||||
<Option>
|
||||
<TestName>SOS.WebApp3</TestName>
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<RuntimeFrameworkVersion>$(AspNetCoreVersion30)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
</Options>
|
||||
|
||||
<HostExe>$(RepoRootDir)/.dotnet/dotnet</HostExe>
|
||||
|
|
|
@ -17,13 +17,13 @@
|
|||
<InstallDir>$(RootBinDir)\bin\Windows_NT.$(TargetArchitecture).$(TargetConfiguration)</InstallDir>
|
||||
<LogDir>$(RootBinDir)\TestResults\$(TargetConfiguration)\sos.unittests_$(Timestamp)</LogDir>
|
||||
<DumpDir>$(RootBinDir)\tmp\$(TargetConfiguration)\dumps</DumpDir>
|
||||
<CDBPath>$(NuGetPackageCacheDir)\cdb-sos\10.0.18362\runtimes\win-$(TargetArchitecture)\native\cdb.exe</CDBPath>
|
||||
<CDBPath>$(RootBinDir)\bin\SOS.UnitTests\$(TargetConfiguration)\netcoreapp2.0\publish\runtimes\win-$(TargetArchitecture)\native\cdb.exe</CDBPath>
|
||||
<CDBHelperExtension>$(InstallDir)\runcommand.dll</CDBHelperExtension>
|
||||
<HostRuntimeDir>$(RepoRootDir)\.dotnet\shared\Microsoft.NETCore.App\$(RuntimeVersion21)</HostRuntimeDir>
|
||||
|
||||
<DebuggeeSourceRoot>$(RepoRootDir)\src\SOS\SOS.UnitTests\Debuggees</DebuggeeSourceRoot>
|
||||
<DebuggeeBuildRoot>$(RootBinDir)\Debuggees</DebuggeeBuildRoot>
|
||||
<DebuggeeNativeLibRoot>$(DebuggeeBuildRoot)\native</DebuggeeNativeLibRoot>
|
||||
<DebuggeeBuildProcess>cli</DebuggeeBuildProcess>
|
||||
<DebuggeeBuildProcess>sdk.prebuilt</DebuggeeBuildProcess>
|
||||
<DebuggeeBuildRoot>$(RootBinDir)</DebuggeeBuildRoot>
|
||||
<CliPath>$(RepoRootDir)\.dotnet\dotnet.exe</CliPath>
|
||||
|
||||
<NuGetPackageFeeds>
|
||||
|
@ -32,52 +32,130 @@
|
|||
</NuGetPackageFeeds>
|
||||
|
||||
<Options>
|
||||
<!--
|
||||
.NET Core Runtime
|
||||
-->
|
||||
<Option>
|
||||
<TestProduct>ProjectK</TestProduct>
|
||||
<Options>
|
||||
<!--
|
||||
Default (prebuilt)
|
||||
-->
|
||||
<Option>
|
||||
<!-- Build the debuggee for 2.1 but run it on latest -->
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion21)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<!-- The debuggee built for 3.0 but run it on latest -->
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersionLatest)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option>
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion30)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<!-- Build the debuggee for 2.1 but run it on 2.2 -->
|
||||
<!-- The debuggee built for 2.1 but run it on 2.2 -->
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion22)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion22)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion21)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion21)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<BuildProjectFramework>netcoreapp1.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion11)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion11)</RuntimeFrameworkVersion>
|
||||
<!-- SOS needs at least 2.0 to run. The default without this is to use the runtime being debuggged to host SOS.NETCore -->
|
||||
<SOSHostRuntime>$(RepoRootDir)\.dotnet\shared\Microsoft.NETCore.App\$(RuntimeVersion21)</SOSHostRuntime>
|
||||
</Option>
|
||||
</Options>
|
||||
<Options>
|
||||
<Option Condition="$(TargetArchitecture) == x64">
|
||||
<DotNetDumpPath>$(RootBinDir)/bin/dotnet-dump/$(TargetConfiguration)/netcoreapp2.1/publish/dotnet-dump.dll</DotNetDumpPath>
|
||||
<SOSHostRuntime>$(HostRuntimeDir)</SOSHostRuntime>
|
||||
</Option>
|
||||
<!--
|
||||
SOS.StackAndOtherTests (cli because tested with full, embedded and portable PDBs)
|
||||
-->
|
||||
<Option>
|
||||
<DebuggeeBuildProcess>cli</DebuggeeBuildProcess>
|
||||
<DebuggeeBuildRoot>$(RootBinDir)\Debuggees</DebuggeeBuildRoot>
|
||||
<TestName>SOS.StackAndOtherTests</TestName>
|
||||
<Options>
|
||||
<Option>
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion30)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion30)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option>
|
||||
<!-- Build the debuggee for 3.0 but run it on latest -->
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion30)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersionLatest)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion21)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion21)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<!-- The debuggee built for 2.1 but run it on 2.2 -->
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion21)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion22)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<BuildProjectFramework>netcoreapp1.1</BuildProjectFramework>
|
||||
<BuildProjectMicrosoftNetCoreAppVersion>$(RuntimeVersion11)</BuildProjectMicrosoftNetCoreAppVersion>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion11)</RuntimeFrameworkVersion>
|
||||
<!-- SOS needs at least 2.0 to run. The default without this is to use the runtime being debuggged to host SOS.NETCore -->
|
||||
<SOSHostRuntime>$(HostRuntimeDir)</SOSHostRuntime>
|
||||
</Option>
|
||||
</Options>
|
||||
</Option>
|
||||
<!--
|
||||
SOS.WebApp (runs only on Windows 2.x aspnetcore)
|
||||
-->
|
||||
<Option>
|
||||
<TestName>SOS.WebApp</TestName>
|
||||
<Options>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion22)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
<Option Condition="'$(DailyTest)' != 'true'">
|
||||
<BuildProjectFramework>netcoreapp2.1</BuildProjectFramework>
|
||||
<RuntimeFrameworkVersion>$(RuntimeVersion21)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
</Options>
|
||||
</Option>
|
||||
<!--
|
||||
SOS.WebApp3 (runs only on 3.0 aspnetcore)
|
||||
-->
|
||||
<Option>
|
||||
<TestName>SOS.WebApp3</TestName>
|
||||
<BuildProjectFramework>netcoreapp3.0</BuildProjectFramework>
|
||||
<RuntimeFrameworkVersion>$(AspNetCoreVersion30)</RuntimeFrameworkVersion>
|
||||
</Option>
|
||||
</Options>
|
||||
|
||||
<HostExe>$(RepoRootDir)\.dotnet\dotnet.exe</HostExe>
|
||||
<HostArgs>--fx-version $(RuntimeFrameworkVersion)</HostArgs>
|
||||
<RuntimeSymbolsPath>$(RepoRootDir)\.dotnet\shared\Microsoft.NETCore.App\$(RuntimeFrameworkVersion)</RuntimeSymbolsPath>
|
||||
<SOSPath>$(InstallDir)\sos.dll</SOSPath>
|
||||
<DotNetDumpPath>$(RootBinDir)/bin/dotnet-dump/$(TargetConfiguration)/netcoreapp2.1/publish/dotnet-dump.dll</DotNetDumpPath>
|
||||
</Option>
|
||||
<!--
|
||||
Desktop Runtime (debuggees cli built)
|
||||
-->
|
||||
<Option Condition="$(TargetArchitecture) != arm64">
|
||||
<Options>
|
||||
<Option>
|
||||
</Option>
|
||||
<Option>
|
||||
<TestName>SOS.StackAndOtherTests</TestName>
|
||||
</Option>
|
||||
</Options>
|
||||
<TestProduct>Desktop</TestProduct>
|
||||
<DebuggeeBuildProcess>cli</DebuggeeBuildProcess>
|
||||
<DebuggeeBuildRoot>$(RootBinDir)\Debuggees</DebuggeeBuildRoot>
|
||||
<BuildProjectFramework>net462</BuildProjectFramework>
|
||||
<BuildProjectRuntime>win-$(TargetArchitecture)</BuildProjectRuntime>
|
||||
<DebugType>full</DebugType>
|
||||
<FrameworkDirPath Condition="$(TargetArchitecture) == x64">$(WinDir)\Microsoft.Net\Framework64\v4.0.30319\</FrameworkDirPath>
|
||||
<FrameworkDirPath Condition="$(TargetArchitecture) != x64">$(WinDir)\Microsoft.Net\Framework\v4.0.30319\</FrameworkDirPath>
|
||||
<RuntimeSymbolsPath>$(FrameworkDirPath)</RuntimeSymbolsPath>
|
||||
<BuildProjectFramework>net462</BuildProjectFramework>
|
||||
<SOSPath>$(FrameworkDirPath)\sos.dll</SOSPath>
|
||||
</Option>
|
||||
</Options>
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<!-- Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -->
|
||||
<Project>
|
||||
<Import Project="$(MSBuildThisFileDirectory)..\..\..\Directory.Build.props"/>
|
||||
|
||||
<PropertyGroup>
|
||||
<DebugType Condition="'$(TargetFramework)' == 'net462'">full</DebugType>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Optimize>false</Optimize>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<DefineConstants Condition="'$(BuildProjectFramework)' != 'net461'">$(DefineConstants);FULL_CLR</DefineConstants>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
<DefineConstants Condition="'$(TargetFramework)' == 'net462'">$(DefineConstants);FULL_CLR</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -15,6 +15,6 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Condition="'$(BuildProjectFramework)' != 'net461'" Include="System.Runtime.Loader" Version="4.3.0" />
|
||||
<PackageReference Condition="'$(TargetFramework)' != 'net462'" Include="System.Runtime.Loader" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Library</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Library</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>$(BuildProjectFramework)</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<TargetFramework Condition="'$(BuildProjectFramework)' != ''">$(BuildProjectFramework)</TargetFramework>
|
||||
<TargetFrameworks Condition="'$(BuildProjectFramework)' == ''">netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<AdditionalSourceCopy Include="..\TaskNestedException.sln" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\RandomUserLibrary\RandomUserLibrary.csproj" />
|
||||
</ItemGroup>
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
using Microsoft.AspNetCore;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
|
||||
namespace webapp
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static string PipeServerName;
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
if (args.Length > 0)
|
||||
{
|
||||
PipeServerName = args[0];
|
||||
Console.WriteLine("Pipe server: {0}", PipeServerName);
|
||||
}
|
||||
|
||||
using (IWebHost host = CreateWebHostBuilder(args).Build())
|
||||
{
|
||||
host.Start();
|
||||
|
||||
using (var client = new HttpClient())
|
||||
{
|
||||
string url = $"http://localhost:5000";
|
||||
Console.WriteLine($"Starting request to {url}");
|
||||
try
|
||||
{
|
||||
HttpResponseMessage response = client.GetAsync(url).GetAwaiter().GetResult();
|
||||
}
|
||||
catch (HttpRequestException ex)
|
||||
{
|
||||
Console.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
host.WaitForShutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
|
||||
WebHost.CreateDefaultBuilder(args)
|
||||
.UseStartup<Startup>();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:6270",
|
||||
"sslPort": 44313
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"WebApp": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:5001;http://localhost:5000",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System;
|
||||
using System.IO.Pipes;
|
||||
|
||||
namespace webapp
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
|
||||
{
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
|
||||
app.Run(async (context) =>
|
||||
{
|
||||
await context.Response.WriteAsync("Hello World!");
|
||||
|
||||
if (Program.PipeServerName != null)
|
||||
{
|
||||
var pipeStream = new NamedPipeClientStream(Program.PipeServerName);
|
||||
Console.WriteLine("Connecting to pipe {0}", Program.PipeServerName);
|
||||
pipeStream.Connect();
|
||||
|
||||
// Wait for server to send something
|
||||
int input = pipeStream.ReadByte();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,46 @@
|
|||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
|
||||
namespace WebApp3
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static string PipeServerName;
|
||||
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
if (args.Length > 0)
|
||||
{
|
||||
PipeServerName = args[0];
|
||||
Console.WriteLine("Pipe server: {0}", PipeServerName);
|
||||
}
|
||||
|
||||
using (IHost host = CreateHostBuilder(args).Build())
|
||||
{
|
||||
host.Start();
|
||||
|
||||
using (var client = new HttpClient())
|
||||
{
|
||||
string url = $"http://localhost:5000";
|
||||
Console.WriteLine($"Starting request to {url}");
|
||||
try
|
||||
{
|
||||
HttpResponseMessage response = client.GetAsync(url).GetAwaiter().GetResult();
|
||||
}
|
||||
catch (HttpRequestException ex)
|
||||
{
|
||||
Console.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
host.WaitForShutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) =>
|
||||
Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>
|
||||
webBuilder.UseStartup<Startup>());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:55377/",
|
||||
"sslPort": 0
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"WebApp3": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:5001;http://localhost:5000",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using System;
|
||||
using System.IO.Pipes;
|
||||
|
||||
namespace WebApp3
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
||||
{
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
|
||||
app.UseRouting();
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapGet("/", async context =>
|
||||
{
|
||||
await context.Response.WriteAsync("Hello World!");
|
||||
|
||||
if (Program.PipeServerName != null)
|
||||
{
|
||||
var pipeStream = new NamedPipeClientStream(Program.PipeServerName);
|
||||
Console.WriteLine("Connecting to pipe {0}", Program.PipeServerName);
|
||||
pipeStream.Connect();
|
||||
|
||||
// Wait for server to send something
|
||||
int input = pipeStream.ReadByte();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"System": "Information",
|
||||
"Microsoft": "Information"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
|
@ -7,6 +7,7 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using Xunit.Abstractions;
|
||||
|
@ -21,7 +22,13 @@ public class SOS
|
|||
|
||||
ITestOutputHelper Output { get; set; }
|
||||
|
||||
public static IEnumerable<object[]> Configurations => TestRunConfiguration.Instance.Configurations.Select(c => new[] { c });
|
||||
public static IEnumerable<object[]> GetConfigurations(string key, string value)
|
||||
{
|
||||
return TestRunConfiguration.Instance.Configurations.Where((c) => key == null || c.AllSettings.GetValueOrDefault(key) == value).Select(c => new[] { c });
|
||||
}
|
||||
|
||||
public static IEnumerable<object[]> Configurations => GetConfigurations("TestName", null);
|
||||
|
||||
private void SkipIfArm(TestConfiguration config)
|
||||
{
|
||||
if (config.TargetArchitecture == "arm" || config.TargetArchitecture == "arm64")
|
||||
|
@ -30,69 +37,79 @@ public class SOS
|
|||
}
|
||||
}
|
||||
|
||||
private static bool IsCreateDumpConfig(TestConfiguration config)
|
||||
private async Task RunTest(string scriptName, bool testLive = true, bool testDump = true, SOSRunner.TestInformation information = null)
|
||||
{
|
||||
return config.DebuggeeDumpOutputRootDir() != null;
|
||||
}
|
||||
information.OutputHelper = Output;
|
||||
|
||||
private static bool IsOpenDumpConfig(TestConfiguration config)
|
||||
{
|
||||
return config.DebuggeeDumpInputRootDir() != null;
|
||||
}
|
||||
|
||||
private Task RunTest(TestConfiguration config, string debuggeeName, string scriptName, bool useCreateDump = true)
|
||||
{
|
||||
return RunTest(config, "SOS." + debuggeeName, debuggeeName, scriptName, useCreateDump: useCreateDump);
|
||||
}
|
||||
|
||||
private async Task RunTest(TestConfiguration config, string testName, string debuggeeName, string scriptName, string debuggeeArguments = null, bool useCreateDump = true)
|
||||
{
|
||||
if (!SOSRunner.IsAlpine())
|
||||
if (testLive && !SOSRunner.IsAlpine())
|
||||
{
|
||||
// Live
|
||||
using (SOSRunner runner = await SOSRunner.StartDebugger(config, Output, testName, debuggeeName, debuggeeArguments))
|
||||
using (SOSRunner runner = await SOSRunner.StartDebugger(information, SOSRunner.DebuggerAction.Live))
|
||||
{
|
||||
await runner.RunScript(scriptName);
|
||||
}
|
||||
}
|
||||
|
||||
// Generate a crash dump.
|
||||
if (IsCreateDumpConfig(config))
|
||||
if (testDump)
|
||||
{
|
||||
if (!useCreateDump && SOSRunner.IsAlpine())
|
||||
// Generate a crash dump.
|
||||
if (information.TestConfiguration.DebuggeeDumpOutputRootDir() != null)
|
||||
{
|
||||
throw new SkipTestException("lldb tests not supported on Alpine");
|
||||
if (information.DumpGenerator == SOSRunner.DumpGenerator.NativeDebugger && SOSRunner.IsAlpine())
|
||||
{
|
||||
throw new SkipTestException("lldb tests not supported on Alpine");
|
||||
}
|
||||
await SOSRunner.CreateDump(information);
|
||||
}
|
||||
|
||||
// Test against a crash dump.
|
||||
if (information.TestConfiguration.DebuggeeDumpInputRootDir() != null)
|
||||
{
|
||||
if (!SOSRunner.IsAlpine())
|
||||
{
|
||||
// With cdb (Windows) or lldb (Linux or OSX)
|
||||
using (SOSRunner runner = await SOSRunner.StartDebugger(information, SOSRunner.DebuggerAction.LoadDump))
|
||||
{
|
||||
await runner.RunScript(scriptName);
|
||||
}
|
||||
}
|
||||
|
||||
// With the dotnet-dump analyze tool
|
||||
if (information.TestConfiguration.DotNetDumpPath() != null)
|
||||
{
|
||||
using (SOSRunner runner = await SOSRunner.StartDebugger(information, SOSRunner.DebuggerAction.LoadDumpWithDotNetDump))
|
||||
{
|
||||
await runner.RunScript(scriptName);
|
||||
}
|
||||
}
|
||||
}
|
||||
await SOSRunner.CreateDump(config, Output, testName, debuggeeName, debuggeeArguments, useCreateDump);
|
||||
}
|
||||
}
|
||||
|
||||
// Test against a crash dump.
|
||||
if (IsOpenDumpConfig(config))
|
||||
private async Task RunTest(TestConfiguration config, string debuggeeName, string scriptName, string testName = null, bool testLive = true, bool testDump = true, bool testTriage = false)
|
||||
{
|
||||
await RunTest(scriptName, testLive, testDump, new SOSRunner.TestInformation {
|
||||
TestConfiguration = config,
|
||||
TestName = testName,
|
||||
DebuggeeName = debuggeeName,
|
||||
DumpType = SOSRunner.DumpType.Heap
|
||||
});
|
||||
|
||||
if (testTriage)
|
||||
{
|
||||
if (!SOSRunner.IsAlpine())
|
||||
{
|
||||
// With cdb (Windows) or lldb (Linux or OSX)
|
||||
using (SOSRunner runner = await SOSRunner.StartDebugger(config, Output, testName, debuggeeName, debuggeeArguments, SOSRunner.Options.LoadDump))
|
||||
{
|
||||
await runner.RunScript(scriptName);
|
||||
}
|
||||
}
|
||||
|
||||
// With the dotnet-dump analyze tool
|
||||
if (config.DotNetDumpPath() != null)
|
||||
{
|
||||
using (SOSRunner runner = await SOSRunner.StartDebugger(config, Output, testName, debuggeeName, debuggeeArguments, SOSRunner.Options.LoadDumpWithDotNetDump))
|
||||
{
|
||||
await runner.RunScript(scriptName);
|
||||
}
|
||||
}
|
||||
await RunTest(scriptName, testLive: false, testDump, new SOSRunner.TestInformation {
|
||||
TestConfiguration = config,
|
||||
TestName = testName,
|
||||
DebuggeeName = debuggeeName,
|
||||
DumpType = SOSRunner.DumpType.Triage
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task DivZero(TestConfiguration config)
|
||||
{
|
||||
await RunTest(config, "DivZero", "DivZero.script");
|
||||
await RunTest(config, "DivZero", "DivZero.script", testTriage: true);
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
|
@ -101,64 +118,183 @@ public class SOS
|
|||
SkipIfArm(config);
|
||||
|
||||
// Live only
|
||||
if (SOSRunner.IsAlpine())
|
||||
{
|
||||
throw new SkipTestException("lldb tests not supported on Alpine");
|
||||
}
|
||||
using (SOSRunner runner = await SOSRunner.StartDebugger(config, Output, testName: "SOS.GCTests", debuggeeName: "GCWhere"))
|
||||
{
|
||||
await runner.RunScript("GCTests.script");
|
||||
}
|
||||
await RunTest(config, "GCWhere", "GCTests.script", testName: "SOS.GCTests", testDump: false);
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task Overflow(TestConfiguration config)
|
||||
{
|
||||
// The .NET Core createdump facility may not catch stack overflow so use gdb to generate dump
|
||||
await RunTest(config, "Overflow", "Overflow.script", useCreateDump: config.StackOverflowCreatesDump);
|
||||
await RunTest("Overflow.script", information: new SOSRunner.TestInformation {
|
||||
TestConfiguration = config,
|
||||
DebuggeeName = "Overflow",
|
||||
DumpGenerator = config.StackOverflowCreatesDump ? SOSRunner.DumpGenerator.CreateDump : SOSRunner.DumpGenerator.NativeDebugger
|
||||
});
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task Reflection(TestConfiguration config)
|
||||
{
|
||||
await RunTest(config, "ReflectionTest", "Reflection.script");
|
||||
await RunTest(config, "ReflectionTest", "Reflection.script", testTriage: true);
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task SimpleThrow(TestConfiguration config)
|
||||
{
|
||||
await RunTest(config, "SimpleThrow", "SimpleThrow.script");
|
||||
await RunTest(config, "SimpleThrow", "SimpleThrow.script", testTriage: true);
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task NestedExceptionTest(TestConfiguration config)
|
||||
{
|
||||
await RunTest(config, "NestedExceptionTest", "NestedExceptionTest.script");
|
||||
await RunTest(config, "NestedExceptionTest", "NestedExceptionTest.script", testTriage: true);
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task TaskNestedException(TestConfiguration config)
|
||||
{
|
||||
await RunTest(config, "TaskNestedException", "TaskNestedException.script");
|
||||
await RunTest(config, "TaskNestedException", "TaskNestedException.script", testTriage: true);
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task StackTests(TestConfiguration config)
|
||||
{
|
||||
await RunTest(config, "SOS.StackTests", "NestedExceptionTest", "StackTests.script");
|
||||
await RunTest(config, "NestedExceptionTest", "StackTests.script", testName: "SOS.StackTests");
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task OtherCommands(TestConfiguration config)
|
||||
{
|
||||
// This debuggee needs the directory of the exes/dlls to load the SymbolTestDll assembly.
|
||||
await RunTest("OtherCommands.script", information: new SOSRunner.TestInformation {
|
||||
TestConfiguration = config,
|
||||
TestName = "SOS.OtherCommands",
|
||||
DebuggeeName = "SymbolTestApp",
|
||||
DebuggeeArguments = "%DEBUG_ROOT%",
|
||||
});
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(GetConfigurations), "TestName", "SOS.StackAndOtherTests")]
|
||||
public async Task StackAndOtherTests(TestConfiguration config)
|
||||
{
|
||||
if (config.RuntimeFrameworkVersionMajor == 1)
|
||||
{
|
||||
throw new SkipTestException("The debuggee (SymbolTestApp) doesn't work on .NET Core 1.1 because of a AssemblyLoadContext problem");
|
||||
}
|
||||
foreach (TestConfiguration currentConfig in TestRunner.EnumeratePdbTypeConfigs(config))
|
||||
{
|
||||
// This debuggee needs the directory of the exes/dlls to load the SymbolTestDll assembly.
|
||||
await RunTest(currentConfig, "SOS.StackAndOtherTests", "SymbolTestApp", "StackAndOtherTests.script", debuggeeArguments: "%DEBUG_ROOT%");
|
||||
await RunTest("StackAndOtherTests.script", information: new SOSRunner.TestInformation {
|
||||
TestConfiguration = currentConfig,
|
||||
TestName = "SOS.StackAndOtherTests",
|
||||
DebuggeeName = "SymbolTestApp",
|
||||
DebuggeeArguments = "%DEBUG_ROOT%",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(GetConfigurations), "TestName", "SOS.WebApp")]
|
||||
public async Task WebApp(TestConfiguration config)
|
||||
{
|
||||
await RunTest("WebApp.script", testLive: false, information: new SOSRunner.TestInformation {
|
||||
TestConfiguration = config,
|
||||
DebuggeeName = "WebApp",
|
||||
UsePipeSync = true,
|
||||
DumpGenerator = SOSRunner.DumpGenerator.DotNetDump
|
||||
});
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(GetConfigurations), "TestName", "SOS.WebApp3")]
|
||||
public async Task WebApp3(TestConfiguration config)
|
||||
{
|
||||
await RunTest("WebApp.script", testLive: false, information: new SOSRunner.TestInformation {
|
||||
TestConfiguration = config,
|
||||
DebuggeeName = "WebApp3",
|
||||
UsePipeSync = true,
|
||||
DumpGenerator = SOSRunner.DumpGenerator.DotNetDump
|
||||
});
|
||||
}
|
||||
|
||||
[SkippableTheory, MemberData(nameof(Configurations))]
|
||||
public async Task LLDBPluginTests(TestConfiguration config)
|
||||
{
|
||||
if (OS.Kind == OSKind.Windows || config.IsDesktop || config.RuntimeFrameworkVersionMajor == 1 || SOSRunner.IsAlpine())
|
||||
{
|
||||
throw new SkipTestException("lldb plugin tests not supported on Windows, Alpine Linux or .NET Core 1.1");
|
||||
}
|
||||
string testName = "SOS." + nameof(LLDBPluginTests);
|
||||
TestRunner.OutputHelper outputHelper = null;
|
||||
try
|
||||
{
|
||||
// Setup the logging from the options in the config file
|
||||
outputHelper = TestRunner.ConfigureLogging(config, Output, testName);
|
||||
|
||||
outputHelper.WriteLine("Starting {0}", testName);
|
||||
outputHelper.WriteLine("{");
|
||||
|
||||
string program = "/usr/bin/python";
|
||||
if (!File.Exists(program))
|
||||
{
|
||||
throw new ArgumentException($"{program} does not exists");
|
||||
}
|
||||
var arguments = new StringBuilder();
|
||||
string repoRootDir = TestConfiguration.MakeCanonicalPath(config.AllSettings["RepoRootDir"]);
|
||||
|
||||
// Get test python script path
|
||||
string scriptDir = Path.Combine(repoRootDir, "src", "SOS", "lldbplugin.tests");
|
||||
arguments.Append(Path.Combine(scriptDir, "test_libsosplugin.py"));
|
||||
arguments.Append(" ");
|
||||
|
||||
// Get lldb path
|
||||
arguments.AppendFormat("--lldb {0} ", Environment.GetEnvironmentVariable("LLDB_PATH") ?? throw new ArgumentException("LLDB_PATH environment variable not set"));
|
||||
|
||||
// Add dotnet host program and arguments
|
||||
arguments.Append("--host \"");
|
||||
arguments.Append(config.HostExe);
|
||||
arguments.Append(" ");
|
||||
if (!string.IsNullOrWhiteSpace(config.HostArgs))
|
||||
{
|
||||
arguments.Append(config.HostArgs);
|
||||
arguments.Append(" ");
|
||||
}
|
||||
arguments.Append("\" ");
|
||||
|
||||
// Add lldb plugin path
|
||||
arguments.AppendFormat("--plugin {0} ", config.SOSPath() ?? throw new ArgumentException("SOSPath config not set"));
|
||||
|
||||
// Add log directory
|
||||
string logFileDir = Path.Combine(config.LogDirPath, config.RuntimeFrameworkVersion);
|
||||
Directory.CreateDirectory(logFileDir);
|
||||
arguments.AppendFormat("--logfiledir {0} ", logFileDir);
|
||||
|
||||
// Add test debuggee assembly
|
||||
string testDebuggee = Path.Combine(repoRootDir, "artifacts", "bin", "TestDebuggee", config.TargetConfiguration, config.BuildProjectFramework, "TestDebuggee.dll");
|
||||
arguments.AppendFormat("--assembly {0}", testDebuggee);
|
||||
|
||||
// Create the python script process runner
|
||||
ProcessRunner processRunner = new ProcessRunner(program, arguments.ToString()).
|
||||
WithLog(new TestRunner.TestLogger(outputHelper.IndentedOutput)).
|
||||
WithTimeout(TimeSpan.FromMinutes(5)).
|
||||
WithExpectedExitCode(0).
|
||||
WithWorkingDirectory(scriptDir).
|
||||
// Turn on stress logging so the dumplog and histinit commands pass
|
||||
WithEnvironmentVariable("COMPlus_LogFacility", "0xffffffbf").
|
||||
WithEnvironmentVariable("COMPlus_LogLevel", "6").
|
||||
WithEnvironmentVariable("COMPlus_StressLog", "1").
|
||||
WithEnvironmentVariable("COMPlus_StressLogSize", "65536");
|
||||
|
||||
// Start the process runner
|
||||
processRunner.Start();
|
||||
|
||||
// Wait for the debuggee to finish
|
||||
await processRunner.WaitForExit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Log the exception
|
||||
outputHelper?.WriteLine(ex.ToString());
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
outputHelper?.WriteLine("}");
|
||||
outputHelper?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,9 @@
|
|||
using Microsoft.Diagnostics.TestHelpers;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.IO.Pipes;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
@ -16,24 +18,40 @@ using Xunit.Extensions;
|
|||
|
||||
public class SOSRunner : IDisposable
|
||||
{
|
||||
readonly TestConfiguration _config;
|
||||
readonly TestRunner.OutputHelper _outputHelper;
|
||||
readonly Dictionary<string, string> _variables;
|
||||
readonly ScriptLogger _scriptLogger;
|
||||
readonly ProcessRunner _processRunner;
|
||||
readonly bool _isDump;
|
||||
|
||||
string _lastCommandOutput;
|
||||
string _previousCommandCapture;
|
||||
|
||||
public enum Options
|
||||
/// <summary>
|
||||
/// What to use to generate the dump
|
||||
/// </summary>
|
||||
public enum DumpGenerator
|
||||
{
|
||||
None,
|
||||
NativeDebugger,
|
||||
CreateDump,
|
||||
DotNetDump,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dump type
|
||||
/// </summary>
|
||||
public enum DumpType
|
||||
{
|
||||
Triage,
|
||||
Heap,
|
||||
Full
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// What action should the debugger do
|
||||
/// </summary>
|
||||
public enum DebuggerAction
|
||||
{
|
||||
Live,
|
||||
GenerateDump,
|
||||
LoadDump,
|
||||
LoadDumpWithDotNetDump,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Which debugger to use
|
||||
/// </summary>
|
||||
public enum NativeDebugger
|
||||
{
|
||||
Unknown,
|
||||
|
@ -43,6 +61,39 @@ public class SOSRunner : IDisposable
|
|||
DotNetDump,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// SOS test runner config information
|
||||
/// </summary>
|
||||
public class TestInformation
|
||||
{
|
||||
private string _testName;
|
||||
|
||||
public TestConfiguration TestConfiguration { get; set; }
|
||||
|
||||
public ITestOutputHelper OutputHelper { get; set; }
|
||||
|
||||
public string TestName
|
||||
{
|
||||
get { return _testName ?? "SOS." + DebuggeeName; }
|
||||
set { _testName = value; }
|
||||
}
|
||||
|
||||
public string DebuggeeName { get; set; }
|
||||
|
||||
public string DebuggeeArguments { get; set; }
|
||||
|
||||
public DumpGenerator DumpGenerator { get; set; } = DumpGenerator.CreateDump;
|
||||
|
||||
public DumpType DumpType { get; set; } = DumpType.Heap;
|
||||
|
||||
public bool UsePipeSync { get; set; } = false;
|
||||
|
||||
public bool IsValid()
|
||||
{
|
||||
return TestConfiguration != null && OutputHelper != null && DebuggeeName != null;
|
||||
}
|
||||
}
|
||||
|
||||
public const string HexValueRegEx = "[A-Fa-f0-9]+(`[A-Fa-f0-9]+)?";
|
||||
public const string DecValueRegEx = "[0-9]+(`[0-9]+)?";
|
||||
|
||||
|
@ -53,8 +104,18 @@ public class SOSRunner : IDisposable
|
|||
get { return Debugger.ToString().ToUpperInvariant(); }
|
||||
}
|
||||
|
||||
private SOSRunner(NativeDebugger debugger, TestConfiguration config, TestRunner.OutputHelper outputHelper,
|
||||
Dictionary<string, string> variables, ScriptLogger scriptLogger, ProcessRunner processRunner, bool isDump)
|
||||
readonly TestConfiguration _config;
|
||||
readonly TestRunner.OutputHelper _outputHelper;
|
||||
readonly Dictionary<string, string> _variables;
|
||||
readonly ScriptLogger _scriptLogger;
|
||||
readonly ProcessRunner _processRunner;
|
||||
readonly DumpType? _dumpType;
|
||||
|
||||
string _lastCommandOutput;
|
||||
string _previousCommandCapture;
|
||||
|
||||
private SOSRunner(NativeDebugger debugger, TestConfiguration config, TestRunner.OutputHelper outputHelper, Dictionary<string, string> variables,
|
||||
ScriptLogger scriptLogger, ProcessRunner processRunner, DumpType? dumpType)
|
||||
{
|
||||
Debugger = debugger;
|
||||
_config = config;
|
||||
|
@ -62,73 +123,96 @@ public class SOSRunner : IDisposable
|
|||
_variables = variables;
|
||||
_scriptLogger = scriptLogger;
|
||||
_processRunner = processRunner;
|
||||
_isDump = isDump;
|
||||
_dumpType = dumpType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run a debuggee and create a dump.
|
||||
/// </summary>
|
||||
/// <param name="config">test configuration</param>
|
||||
/// <param name="output">output instance</param>
|
||||
/// <param name="testName">name of test</param>
|
||||
/// <param name="debuggeeName">debuggee name</param>
|
||||
/// <param name="debuggeeArguments">optional args to pass to debuggee</param>
|
||||
/// <param name="useCreateDump">if true, use "createdump" to generate core dump</param>
|
||||
public static async Task CreateDump(TestConfiguration config, ITestOutputHelper output, string testName, string debuggeeName,
|
||||
string debuggeeArguments = null, bool useCreateDump = true)
|
||||
/// <param name="information">test info</param>
|
||||
public static async Task CreateDump(TestInformation information)
|
||||
{
|
||||
if (!information.IsValid()) {
|
||||
throw new ArgumentException("Invalid TestInformation");
|
||||
}
|
||||
TestConfiguration config = information.TestConfiguration;
|
||||
DumpGenerator dumpGeneration = information.DumpGenerator;
|
||||
|
||||
Directory.CreateDirectory(config.DebuggeeDumpOutputRootDir());
|
||||
|
||||
if (!config.CreateDumpExists || !useCreateDump || config.GenerateDumpWithLLDB() || config.GenerateDumpWithGDB())
|
||||
if (dumpGeneration == DumpGenerator.CreateDump)
|
||||
{
|
||||
using (SOSRunner runner = await SOSRunner.StartDebugger(config, output, testName, debuggeeName, debuggeeArguments, Options.GenerateDump))
|
||||
if (!config.CreateDumpExists || config.GenerateDumpWithLLDB() || config.GenerateDumpWithGDB())
|
||||
{
|
||||
try
|
||||
{
|
||||
await runner.LoadSosExtension();
|
||||
dumpGeneration = DumpGenerator.NativeDebugger;
|
||||
}
|
||||
}
|
||||
|
||||
string command = null;
|
||||
switch (runner.Debugger)
|
||||
{
|
||||
case SOSRunner.NativeDebugger.Cdb:
|
||||
await runner.ContinueExecution();
|
||||
// On desktop create triage dump. On .NET Core, create full dump.
|
||||
command = config.IsDesktop ? ".dump /o /mshuRp %DUMP_NAME%" : ".dump /o /ma %DUMP_NAME%";
|
||||
break;
|
||||
case SOSRunner.NativeDebugger.Gdb:
|
||||
command = "generate-core-file %DUMP_NAME%";
|
||||
break;
|
||||
case SOSRunner.NativeDebugger.Lldb:
|
||||
await runner.ContinueExecution();
|
||||
command = "sos CreateDump %DUMP_NAME%";
|
||||
break;
|
||||
default:
|
||||
throw new Exception(runner.Debugger.ToString() + " does not support creating dumps");
|
||||
}
|
||||
if (dumpGeneration == DumpGenerator.NativeDebugger)
|
||||
{
|
||||
// Force the dump type to full for .NET Core 1.1 because the heap dumps are broken (can't read ThreadStore).
|
||||
if (config.IsNETCore && config.RuntimeFrameworkVersionMajor == 1)
|
||||
{
|
||||
information.DumpType = DumpType.Full;
|
||||
}
|
||||
using SOSRunner runner = await SOSRunner.StartDebugger(information, DebuggerAction.GenerateDump);
|
||||
try
|
||||
{
|
||||
await runner.LoadSosExtension();
|
||||
|
||||
await runner.RunCommand(command);
|
||||
await runner.QuitDebugger();
|
||||
}
|
||||
catch (Exception ex)
|
||||
string command = null;
|
||||
switch (runner.Debugger)
|
||||
{
|
||||
runner.WriteLine(ex.ToString());
|
||||
throw;
|
||||
case SOSRunner.NativeDebugger.Cdb:
|
||||
await runner.ContinueExecution();
|
||||
switch (information.DumpType)
|
||||
{
|
||||
case DumpType.Heap:
|
||||
command = ".dump /o /mw %DUMP_NAME%";
|
||||
break;
|
||||
case DumpType.Triage:
|
||||
command = ".dump /o /mshuRp %DUMP_NAME%";
|
||||
break;
|
||||
case DumpType.Full:
|
||||
command = ".dump /o /ma %DUMP_NAME%";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SOSRunner.NativeDebugger.Gdb:
|
||||
command = "generate-core-file %DUMP_NAME%";
|
||||
break;
|
||||
default:
|
||||
throw new Exception(runner.Debugger.ToString() + " does not support creating dumps");
|
||||
}
|
||||
|
||||
await runner.RunCommand(command);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
runner.WriteLine(ex.ToString());
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
await runner.QuitDebugger();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TestRunner.OutputHelper outputHelper = null;
|
||||
NamedPipeServerStream pipeServer = null;
|
||||
string pipeName = null;
|
||||
try
|
||||
{
|
||||
// Setup the logging from the options in the config file
|
||||
outputHelper = TestRunner.ConfigureLogging(config, output, testName);
|
||||
outputHelper = TestRunner.ConfigureLogging(config, information.OutputHelper, information.TestName);
|
||||
|
||||
// Restore and build the debuggee. The debuggee name is lower cased because the
|
||||
// source directory name has been lowercased by the build system.
|
||||
DebuggeeConfiguration debuggeeConfig = await DebuggeeCompiler.Execute(config, debuggeeName, outputHelper);
|
||||
DebuggeeConfiguration debuggeeConfig = await DebuggeeCompiler.Execute(config, information.DebuggeeName, outputHelper);
|
||||
Dictionary<string, string> variables = GenerateVariables(information, debuggeeConfig, DebuggerAction.GenerateDump);
|
||||
|
||||
outputHelper.WriteLine("Starting {0}", testName);
|
||||
outputHelper.WriteLine("Starting {0}", information.TestName);
|
||||
outputHelper.WriteLine("{");
|
||||
|
||||
// Get the full debuggee launch command line (includes the host if required)
|
||||
|
@ -144,29 +228,102 @@ public class SOSRunner : IDisposable
|
|||
}
|
||||
arguments.Append(debuggeeConfig.BinaryExePath);
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(debuggeeArguments))
|
||||
if (!string.IsNullOrWhiteSpace(information.DebuggeeArguments))
|
||||
{
|
||||
arguments.Append(" ");
|
||||
arguments.Append(debuggeeArguments);
|
||||
arguments.Append(information.DebuggeeArguments);
|
||||
}
|
||||
|
||||
// Run the debuggee with the createdump environment variables set to generate a coredump on unhandled exception
|
||||
var testLogger = new TestRunner.TestLogger(outputHelper.IndentedOutput);
|
||||
var variables = GenerateVariables(config, debuggeeConfig, Options.GenerateDump);
|
||||
ProcessRunner processRunner = new ProcessRunner(exePath, ReplaceVariables(variables, arguments.ToString())).
|
||||
WithLog(testLogger).
|
||||
WithTimeout(TimeSpan.FromMinutes(5)).
|
||||
WithEnvironmentVariable("COMPlus_DbgEnableMiniDump", "1").
|
||||
WithEnvironmentVariable("COMPlus_DbgMiniDumpName", ReplaceVariables(variables,"%DUMP_NAME%"));
|
||||
|
||||
// Exit codes on Windows should always be 0, but not on Linux/OSX for the faulting test apps.
|
||||
if (OS.Kind == OSKind.Windows)
|
||||
// Setup a pipe server for the debuggee to connect to sync when to take a dump
|
||||
if (information.UsePipeSync)
|
||||
{
|
||||
processRunner.WithExpectedExitCode(0);
|
||||
int runnerId = Process.GetCurrentProcess().Id;
|
||||
pipeName = $"SOSRunner.{runnerId}.{information.DebuggeeName}";
|
||||
pipeServer = new NamedPipeServerStream(pipeName);
|
||||
arguments.Append(" ");
|
||||
arguments.Append(pipeName);
|
||||
}
|
||||
|
||||
// Create the debuggee process runner
|
||||
ProcessRunner processRunner = new ProcessRunner(exePath, ReplaceVariables(variables, arguments.ToString())).
|
||||
WithLog(new TestRunner.TestLogger(outputHelper.IndentedOutput)).
|
||||
WithTimeout(TimeSpan.FromMinutes(5));
|
||||
|
||||
if (dumpGeneration == DumpGenerator.CreateDump)
|
||||
{
|
||||
if (OS.Kind != OSKind.Linux)
|
||||
{
|
||||
throw new SkipTestException("Createdump doesn't exists on Windows or macOS");
|
||||
}
|
||||
// Run the debuggee with the createdump environment variables set to generate a coredump on unhandled exception
|
||||
processRunner.
|
||||
WithEnvironmentVariable("COMPlus_DbgEnableMiniDump", "1").
|
||||
WithEnvironmentVariable("COMPlus_DbgMiniDumpName", ReplaceVariables(variables, "%DUMP_NAME%"));
|
||||
|
||||
switch (information.DumpType)
|
||||
{
|
||||
case DumpType.Heap:
|
||||
processRunner.WithEnvironmentVariable("COMPlus_DbgMiniDumpType", "2");
|
||||
break;
|
||||
case DumpType.Triage:
|
||||
processRunner.WithEnvironmentVariable("COMPlus_DbgMiniDumpType", "3");
|
||||
break;
|
||||
case DumpType.Full:
|
||||
processRunner.WithEnvironmentVariable("COMPlus_DbgMiniDumpType", "4");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Start the debuggee
|
||||
processRunner.Start();
|
||||
|
||||
if (dumpGeneration == DumpGenerator.DotNetDump)
|
||||
{
|
||||
ITestOutputHelper dotnetDumpOutputHelper = new IndentedTestOutputHelper(outputHelper, " ");
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(config.HostExe) || string.IsNullOrWhiteSpace(config.DotNetDumpPath()))
|
||||
{
|
||||
throw new SkipTestException("dotnet-dump collect needs HostExe and DotNetDumpPath config variables");
|
||||
}
|
||||
|
||||
// Wait until the debuggee gets started. It needs time to spin up before generating the core dump.
|
||||
if (pipeServer != null)
|
||||
{
|
||||
dotnetDumpOutputHelper.WriteLine("Waiting for connection on pipe {0}", pipeName);
|
||||
var source = new CancellationTokenSource(TimeSpan.FromMinutes(5));
|
||||
await pipeServer.WaitForConnectionAsync(source.Token);
|
||||
}
|
||||
|
||||
// Start dotnet-dump collect
|
||||
var dotnetDumpArguments = new StringBuilder();
|
||||
dotnetDumpArguments.Append(config.DotNetDumpPath());
|
||||
dotnetDumpArguments.AppendFormat(" collect --process-id {0} --output %DUMP_NAME%", processRunner.ProcessId);
|
||||
|
||||
ProcessRunner dotnetDumpRunner = new ProcessRunner(config.HostExe, ReplaceVariables(variables, dotnetDumpArguments.ToString())).
|
||||
WithLog(new TestRunner.TestLogger(dotnetDumpOutputHelper)).
|
||||
WithTimeout(TimeSpan.FromMinutes(5)).
|
||||
WithExpectedExitCode(0);
|
||||
|
||||
dotnetDumpRunner.Start();
|
||||
|
||||
// Wait until dotnet-dump collect finishes generating the dump
|
||||
await dotnetDumpRunner.WaitForExit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Log the exception
|
||||
dotnetDumpOutputHelper.WriteLine(ex.ToString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
dotnetDumpOutputHelper.WriteLine("}");
|
||||
|
||||
// Shutdown the debuggee
|
||||
processRunner.Kill();
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for the debuggee to finish
|
||||
await processRunner.WaitForExit();
|
||||
}
|
||||
|
@ -180,6 +337,7 @@ public class SOSRunner : IDisposable
|
|||
{
|
||||
outputHelper?.WriteLine("}");
|
||||
outputHelper?.Dispose();
|
||||
pipeServer?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -187,40 +345,40 @@ public class SOSRunner : IDisposable
|
|||
/// <summary>
|
||||
/// Start a debuggee under a native debugger returning a sos runner instance.
|
||||
/// </summary>
|
||||
/// <param name="config">test configuration</param>
|
||||
/// <param name="output">output instance</param>
|
||||
/// <param name="testName">name of test</param>
|
||||
/// <param name="debuggeeName">debuggee name</param>
|
||||
/// <param name="debuggeeArguments">optional args to pass to debuggee</param>
|
||||
/// <param name="options">dump options</param>
|
||||
/// <param name="information">test info</param>
|
||||
/// <param name="action">debugger action</param>
|
||||
/// <returns>sos runner instance</returns>
|
||||
public static async Task<SOSRunner> StartDebugger(TestConfiguration config, ITestOutputHelper output, string testName, string debuggeeName,
|
||||
string debuggeeArguments = null, Options options = Options.None)
|
||||
public static async Task<SOSRunner> StartDebugger(TestInformation information, DebuggerAction action)
|
||||
{
|
||||
if (!information.IsValid())
|
||||
{
|
||||
throw new ArgumentException("Invalid TestInformation");
|
||||
}
|
||||
TestConfiguration config = information.TestConfiguration;
|
||||
TestRunner.OutputHelper outputHelper = null;
|
||||
SOSRunner sosRunner = null;
|
||||
|
||||
// Figure out which native debugger to use
|
||||
NativeDebugger debugger = GetNativeDebuggerToUse(config, options);
|
||||
|
||||
try
|
||||
{
|
||||
// Setup the logging from the options in the config file
|
||||
outputHelper = TestRunner.ConfigureLogging(config, output, testName);
|
||||
outputHelper = TestRunner.ConfigureLogging(config, information.OutputHelper, information.TestName);
|
||||
|
||||
// Figure out which native debugger to use
|
||||
NativeDebugger debugger = GetNativeDebuggerToUse(config, action);
|
||||
|
||||
// Restore and build the debuggee.
|
||||
DebuggeeConfiguration debuggeeConfig = await DebuggeeCompiler.Execute(config, debuggeeName, outputHelper);
|
||||
DebuggeeConfiguration debuggeeConfig = await DebuggeeCompiler.Execute(config, information.DebuggeeName, outputHelper);
|
||||
|
||||
outputHelper.WriteLine("SOSRunner processing {0}", testName);
|
||||
outputHelper.WriteLine("SOSRunner processing {0}", information.TestName);
|
||||
outputHelper.WriteLine("{");
|
||||
|
||||
var variables = GenerateVariables(config, debuggeeConfig, options);
|
||||
var scriptLogger = new ScriptLogger(debugger, outputHelper.IndentedOutput);
|
||||
var variables = GenerateVariables(information, debuggeeConfig, action);
|
||||
var scriptLogger = new ScriptLogger(outputHelper.IndentedOutput);
|
||||
|
||||
if (options == Options.LoadDump || options == Options.LoadDumpWithDotNetDump)
|
||||
// Make sure the dump file exists
|
||||
if (action == DebuggerAction.LoadDump || action == DebuggerAction.LoadDumpWithDotNetDump)
|
||||
{
|
||||
if (!variables.TryGetValue("%DUMP_NAME%", out string dumpName) || !File.Exists(dumpName))
|
||||
{
|
||||
if (!variables.TryGetValue("%DUMP_NAME%", out string dumpName) || !File.Exists(dumpName)) {
|
||||
throw new FileNotFoundException($"Dump file does not exist: {dumpName ?? ""}");
|
||||
}
|
||||
}
|
||||
|
@ -238,10 +396,10 @@ public class SOSRunner : IDisposable
|
|||
}
|
||||
}
|
||||
debuggeeCommandLine.Append(debuggeeConfig.BinaryExePath);
|
||||
if (!string.IsNullOrWhiteSpace(debuggeeArguments))
|
||||
if (!string.IsNullOrWhiteSpace(information.DebuggeeArguments))
|
||||
{
|
||||
debuggeeCommandLine.Append(" ");
|
||||
debuggeeCommandLine.Append(debuggeeArguments);
|
||||
debuggeeCommandLine.Append(information.DebuggeeArguments);
|
||||
}
|
||||
|
||||
// Get the native debugger path
|
||||
|
@ -265,7 +423,7 @@ public class SOSRunner : IDisposable
|
|||
}
|
||||
arguments.AppendFormat(@"-c "".load {0}""", helperExtension);
|
||||
|
||||
if (options == Options.LoadDump)
|
||||
if (action == DebuggerAction.LoadDump)
|
||||
{
|
||||
arguments.Append(" -z %DUMP_NAME%");
|
||||
}
|
||||
|
@ -287,8 +445,10 @@ public class SOSRunner : IDisposable
|
|||
initialCommands.Add(".sympath+ " + runtimeSymbolsPath);
|
||||
}
|
||||
// Turn off warnings that can happen in the middle of a command's output
|
||||
initialCommands.Add(".outmask- 4");
|
||||
initialCommands.Add(".outmask- 0x244");
|
||||
initialCommands.Add("!sym quiet");
|
||||
break;
|
||||
|
||||
case NativeDebugger.Lldb:
|
||||
// Get the lldb python script file path necessary to capture the output of commands
|
||||
// by printing a prompt after all the command output is printed.
|
||||
|
@ -300,7 +460,7 @@ public class SOSRunner : IDisposable
|
|||
arguments.AppendFormat(@"--no-lldbinit -o ""settings set interpreter.prompt-on-quit false"" -o ""command script import {0}"" -o ""version""", lldbHelperScript);
|
||||
|
||||
// Load the dump or launch the debuggee process
|
||||
if (options == Options.LoadDump)
|
||||
if (action == DebuggerAction.LoadDump)
|
||||
{
|
||||
initialCommands.Add($@"target create --core ""%DUMP_NAME%"" ""{config.HostExe}""");
|
||||
}
|
||||
|
@ -316,9 +476,9 @@ public class SOSRunner : IDisposable
|
|||
}
|
||||
}
|
||||
sb.AppendFormat(@" ""{0}""", debuggeeConfig.BinaryExePath);
|
||||
if (!string.IsNullOrWhiteSpace(debuggeeArguments))
|
||||
if (!string.IsNullOrWhiteSpace(information.DebuggeeArguments))
|
||||
{
|
||||
string[] args = ReplaceVariables(variables, debuggeeArguments).Trim().Split(' ');
|
||||
string[] args = ReplaceVariables(variables, information.DebuggeeArguments).Trim().Split(' ');
|
||||
foreach (string arg in args)
|
||||
{
|
||||
sb.AppendFormat(@" ""{0}""", arg);
|
||||
|
@ -341,12 +501,15 @@ public class SOSRunner : IDisposable
|
|||
initialCommands.Add("process handle -s true -n true -p true SIGABRT");
|
||||
}
|
||||
break;
|
||||
|
||||
case NativeDebugger.Gdb:
|
||||
if (options == Options.LoadDump || options == Options.LoadDumpWithDotNetDump)
|
||||
if (action == DebuggerAction.LoadDump || action == DebuggerAction.LoadDumpWithDotNetDump)
|
||||
{
|
||||
throw new ArgumentException("GDB not meant for loading core dumps");
|
||||
}
|
||||
arguments.AppendFormat("--args {0}", debuggeeCommandLine);
|
||||
|
||||
arguments.Append(@"--init-eval-command=""set prompt <END_COMMAND_OUTPUT>\n""");
|
||||
arguments.AppendFormat(" --args {0}", debuggeeCommandLine);
|
||||
|
||||
// .NET Core 1.1 or less don't catch stack overflow and abort so need to catch SIGSEGV
|
||||
if (config.StackOverflowSIGSEGV)
|
||||
|
@ -365,14 +528,16 @@ public class SOSRunner : IDisposable
|
|||
break;
|
||||
|
||||
case NativeDebugger.DotNetDump:
|
||||
if (options != Options.LoadDumpWithDotNetDump)
|
||||
if (action != DebuggerAction.LoadDumpWithDotNetDump)
|
||||
{
|
||||
throw new ArgumentException($"{options} not supported for dotnet-dump testing");
|
||||
throw new ArgumentException($"{action} not supported for dotnet-dump testing");
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(config.HostExe))
|
||||
{
|
||||
throw new ArgumentException("No HostExe in configuration");
|
||||
}
|
||||
initialCommands.Add("setsymbolserver -directory %DEBUG_ROOT%");
|
||||
|
||||
arguments.Append(debuggerPath);
|
||||
arguments.Append(@" analyze %DUMP_NAME%");
|
||||
debuggerPath = config.HostExe;
|
||||
|
@ -384,14 +549,20 @@ public class SOSRunner : IDisposable
|
|||
WithLog(scriptLogger).
|
||||
WithTimeout(TimeSpan.FromMinutes(10));
|
||||
|
||||
// Exit codes on Windows should always be 0, but not on Linux/OSX for the faulting test apps.
|
||||
// Exit codes on Windows should always be 0, but not on Linux/OSX for the faulting debuggees.
|
||||
if (OS.Kind == OSKind.Windows)
|
||||
{
|
||||
processRunner.WithExpectedExitCode(0);
|
||||
}
|
||||
|
||||
DumpType? dumpType = null;
|
||||
if (action == DebuggerAction.LoadDump || action == DebuggerAction.LoadDumpWithDotNetDump)
|
||||
{
|
||||
dumpType = information.DumpType;
|
||||
}
|
||||
|
||||
// Create the sos runner instance
|
||||
sosRunner = new SOSRunner(debugger, config, outputHelper, variables, scriptLogger, processRunner, options == Options.LoadDump || options == Options.LoadDumpWithDotNetDump);
|
||||
sosRunner = new SOSRunner(debugger, config, outputHelper, variables, scriptLogger, processRunner, dumpType);
|
||||
|
||||
// Start the native debugger
|
||||
processRunner.Start();
|
||||
|
@ -500,7 +671,12 @@ public class SOSRunner : IDisposable
|
|||
else if (line.StartsWith("VERIFY:"))
|
||||
{
|
||||
string verifyLine = line.Substring("VERIFY:".Length);
|
||||
VerifyOutput(verifyLine);
|
||||
VerifyOutput(verifyLine, match: true);
|
||||
}
|
||||
else if (line.StartsWith("!VERIFY:"))
|
||||
{
|
||||
string verifyLine = line.Substring("!VERIFY:".Length);
|
||||
VerifyOutput(verifyLine, match: false);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -542,6 +718,7 @@ public class SOSRunner : IDisposable
|
|||
switch (Debugger)
|
||||
{
|
||||
case NativeDebugger.Cdb:
|
||||
commands.Add($".unload sos.dll");
|
||||
commands.Add($".load {sosPath}");
|
||||
commands.Add(".lines");
|
||||
commands.Add(".reload");
|
||||
|
@ -549,6 +726,16 @@ public class SOSRunner : IDisposable
|
|||
{
|
||||
commands.Add($"!SetHostRuntime {sosHostRuntime}");
|
||||
}
|
||||
// Because Windows triage dumps don't have the target coreclr.dll module path the
|
||||
// fallback of using this target runtime for hosting SOS's managed doesn't work.
|
||||
if (_dumpType.HasValue && _dumpType.Value == DumpType.Triage)
|
||||
{
|
||||
string hostRuntimeDir = _config.HostRuntimeDir();
|
||||
if (hostRuntimeDir != null)
|
||||
{
|
||||
commands.Add($"!SetHostRuntime {hostRuntimeDir}");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NativeDebugger.Lldb:
|
||||
commands.Add($"plugin load {sosPath}");
|
||||
|
@ -571,7 +758,8 @@ public class SOSRunner : IDisposable
|
|||
// Helper function to switch to the thread with an exception
|
||||
void SwitchToExceptionThread()
|
||||
{
|
||||
if (_isDump)
|
||||
// If dump session
|
||||
if (_dumpType.HasValue)
|
||||
{
|
||||
// lldb/dotnet-dump don't load dump with the initial thread set to one
|
||||
// with the exception. This SOS command looks for a thread with a managed
|
||||
|
@ -583,30 +771,34 @@ public class SOSRunner : IDisposable
|
|||
|
||||
public async Task ContinueExecution()
|
||||
{
|
||||
string command = null;
|
||||
bool addPrefix = true;
|
||||
switch (Debugger)
|
||||
// If live session
|
||||
if (!_dumpType.HasValue)
|
||||
{
|
||||
case NativeDebugger.Cdb:
|
||||
command = "g";
|
||||
// Don't add the !runcommand prefix because it gets printed when cdb stops
|
||||
// again because the helper extension used .pcmd to set a stop command.
|
||||
addPrefix = false;
|
||||
break;
|
||||
case NativeDebugger.Lldb:
|
||||
command = "process continue";
|
||||
break;
|
||||
case NativeDebugger.Gdb:
|
||||
command = "continue";
|
||||
break;
|
||||
case NativeDebugger.DotNetDump:
|
||||
break;
|
||||
}
|
||||
if (command != null)
|
||||
{
|
||||
if (!await RunCommand(command, addPrefix))
|
||||
string command = null;
|
||||
bool addPrefix = true;
|
||||
switch (Debugger)
|
||||
{
|
||||
throw new Exception($"'{command}' FAILED");
|
||||
case NativeDebugger.Cdb:
|
||||
command = "g";
|
||||
// Don't add the !runcommand prefix because it gets printed when cdb stops
|
||||
// again because the helper extension used .pcmd to set a stop command.
|
||||
addPrefix = false;
|
||||
break;
|
||||
case NativeDebugger.Lldb:
|
||||
command = "process continue";
|
||||
break;
|
||||
case NativeDebugger.Gdb:
|
||||
command = "continue";
|
||||
break;
|
||||
case NativeDebugger.DotNetDump:
|
||||
break;
|
||||
}
|
||||
if (command != null)
|
||||
{
|
||||
if (!await RunCommand(command, addPrefix))
|
||||
{
|
||||
throw new Exception($"'{command}' FAILED");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -683,7 +875,7 @@ public class SOSRunner : IDisposable
|
|||
await _processRunner.WaitForExit();
|
||||
}
|
||||
|
||||
public void VerifyOutput(string verifyLine)
|
||||
public void VerifyOutput(string verifyLine, bool match)
|
||||
{
|
||||
string regex = ReplaceVariables(verifyLine.TrimStart());
|
||||
|
||||
|
@ -691,18 +883,19 @@ public class SOSRunner : IDisposable
|
|||
{
|
||||
throw new Exception("VerifyOutput: no last command output or debugger exited unexpectedly: " + regex);
|
||||
}
|
||||
if (!new Regex(regex, RegexOptions.Multiline).IsMatch(_lastCommandOutput))
|
||||
|
||||
if (new Regex(regex, RegexOptions.Multiline).IsMatch(_lastCommandOutput) != match)
|
||||
{
|
||||
throw new Exception("Debugger output did not match the expression: " + regex);
|
||||
}
|
||||
}
|
||||
|
||||
public static string GenerateDumpFileName(TestConfiguration config, string debuggeeName, Options options)
|
||||
public static string GenerateDumpFileName(TestInformation information, string debuggeeName, DebuggerAction action)
|
||||
{
|
||||
string dumpRoot = options == Options.GenerateDump ? config.DebuggeeDumpOutputRootDir() : config.DebuggeeDumpInputRootDir();
|
||||
if (dumpRoot != null)
|
||||
{
|
||||
return Path.Combine(dumpRoot, Path.GetFileNameWithoutExtension(debuggeeName) + ".dmp");
|
||||
TestConfiguration config = information.TestConfiguration;
|
||||
string dumpRoot = action == DebuggerAction.GenerateDump ? config.DebuggeeDumpOutputRootDir() : config.DebuggeeDumpInputRootDir();
|
||||
if (!string.IsNullOrEmpty(dumpRoot)) {
|
||||
return Path.Combine(dumpRoot, Path.GetFileNameWithoutExtension(debuggeeName) + "." + information.DumpType.ToString() + ".dmp");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -723,8 +916,6 @@ public class SOSRunner : IDisposable
|
|||
{
|
||||
_processRunner.Kill();
|
||||
}
|
||||
_processRunner.WaitForExit().GetAwaiter().GetResult();
|
||||
|
||||
_outputHelper.WriteLine("}");
|
||||
_outputHelper.Dispose();
|
||||
}
|
||||
|
@ -745,13 +936,13 @@ public class SOSRunner : IDisposable
|
|||
return false;
|
||||
}
|
||||
|
||||
private static NativeDebugger GetNativeDebuggerToUse(TestConfiguration config, Options options)
|
||||
private static NativeDebugger GetNativeDebuggerToUse(TestConfiguration config, DebuggerAction action)
|
||||
{
|
||||
switch (OS.Kind)
|
||||
{
|
||||
case OSKind.Windows:
|
||||
switch (options) {
|
||||
case Options.LoadDumpWithDotNetDump:
|
||||
switch (action) {
|
||||
case DebuggerAction.LoadDumpWithDotNetDump:
|
||||
return NativeDebugger.DotNetDump;
|
||||
default:
|
||||
return NativeDebugger.Cdb;
|
||||
|
@ -759,17 +950,17 @@ public class SOSRunner : IDisposable
|
|||
|
||||
case OSKind.Linux:
|
||||
case OSKind.OSX:
|
||||
switch (options) {
|
||||
case Options.GenerateDump:
|
||||
switch (action) {
|
||||
case DebuggerAction.GenerateDump:
|
||||
return config.GenerateDumpWithLLDB() ? NativeDebugger.Lldb : NativeDebugger.Gdb;
|
||||
case Options.LoadDumpWithDotNetDump:
|
||||
case DebuggerAction.LoadDumpWithDotNetDump:
|
||||
return NativeDebugger.DotNetDump;
|
||||
default:
|
||||
return NativeDebugger.Lldb;
|
||||
}
|
||||
|
||||
default:
|
||||
throw new Exception(OS.Kind.ToString() + " not supported");
|
||||
throw new PlatformNotSupportedException(OS.Kind.ToString() + " not supported");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -852,7 +1043,7 @@ public class SOSRunner : IDisposable
|
|||
string command = ReplaceVariables(input);
|
||||
if (addPrefix)
|
||||
{
|
||||
command = _scriptLogger.ProcessCommand(command);
|
||||
command = ProcessCommand(command);
|
||||
}
|
||||
_processRunner.StandardInputWriteLine(command);
|
||||
|
||||
|
@ -862,6 +1053,21 @@ public class SOSRunner : IDisposable
|
|||
return result.CommandSucceeded;
|
||||
}
|
||||
|
||||
private string ProcessCommand(string command)
|
||||
{
|
||||
switch (Debugger)
|
||||
{
|
||||
case NativeDebugger.Cdb:
|
||||
command = string.Format("!runcommand {0}", command);
|
||||
break;
|
||||
|
||||
case NativeDebugger.Lldb:
|
||||
command = string.Format("runcommand {0}", command);
|
||||
break;
|
||||
}
|
||||
return command;
|
||||
}
|
||||
|
||||
private void LogProcessingReproInfo(string scriptFile, HashSet<string> enabledDefines)
|
||||
{
|
||||
WriteLine(" STARTING SCRIPT: {0}", scriptFile);
|
||||
|
@ -882,7 +1088,7 @@ public class SOSRunner : IDisposable
|
|||
DebuggerToString,
|
||||
OS.Kind.ToString().ToUpperInvariant(),
|
||||
_config.TestProduct.ToUpperInvariant(),
|
||||
_config.TargetArchitecture.ToUpperInvariant(),
|
||||
_config.TargetArchitecture.ToUpperInvariant()
|
||||
};
|
||||
try
|
||||
{
|
||||
|
@ -891,8 +1097,20 @@ public class SOSRunner : IDisposable
|
|||
catch (SkipTestException)
|
||||
{
|
||||
}
|
||||
if (_isDump)
|
||||
if (_dumpType.HasValue)
|
||||
{
|
||||
switch (_dumpType.Value)
|
||||
{
|
||||
case DumpType.Triage:
|
||||
defines.Add("TRIAGE_DUMP");
|
||||
break;
|
||||
case DumpType.Heap:
|
||||
defines.Add("HEAP_DUMP");
|
||||
break;
|
||||
case DumpType.Full:
|
||||
defines.Add("FULL_DUMP");
|
||||
break;
|
||||
}
|
||||
defines.Add("DUMP");
|
||||
}
|
||||
else
|
||||
|
@ -931,11 +1149,11 @@ public class SOSRunner : IDisposable
|
|||
return true;
|
||||
}
|
||||
|
||||
private static Dictionary<string, string> GenerateVariables(TestConfiguration config, DebuggeeConfiguration debuggeeConfig, Options options)
|
||||
private static Dictionary<string, string> GenerateVariables(TestInformation information, DebuggeeConfiguration debuggeeConfig, DebuggerAction action)
|
||||
{
|
||||
var vars = new Dictionary<string, string>();
|
||||
string debuggeeExe = debuggeeConfig.BinaryExePath;
|
||||
string dumpFileName = GenerateDumpFileName(config, Path.GetFileNameWithoutExtension(debuggeeExe), options);
|
||||
string dumpFileName = GenerateDumpFileName(information, debuggeeExe, action);
|
||||
|
||||
vars.Add("%DEBUGGEE_EXE%", debuggeeExe);
|
||||
if (dumpFileName != null)
|
||||
|
@ -943,7 +1161,7 @@ public class SOSRunner : IDisposable
|
|||
vars.Add("%DUMP_NAME%", dumpFileName);
|
||||
}
|
||||
vars.Add("%DEBUG_ROOT%", debuggeeConfig.BinaryDirPath);
|
||||
vars.Add("%SOS_PATH%", config.SOSPath());
|
||||
vars.Add("%SOS_PATH%", information.TestConfiguration.SOSPath());
|
||||
|
||||
// Can be used in an RegEx expression
|
||||
vars.Add("<DEBUGGEE_EXE>", debuggeeExe.Replace(@"\", @"\\"));
|
||||
|
@ -986,19 +1204,19 @@ public class SOSRunner : IDisposable
|
|||
}
|
||||
}
|
||||
|
||||
readonly NativeDebugger _debugger;
|
||||
readonly List<Task<CommandResult>> _taskQueue;
|
||||
readonly StringBuilder _lineBuffer;
|
||||
readonly StringBuilder _lastCommandOutput;
|
||||
TaskCompletionSource<CommandResult> _taskSource;
|
||||
|
||||
public bool HasProcessExited { get; private set; }
|
||||
|
||||
public ScriptLogger(NativeDebugger debugger, ITestOutputHelper output)
|
||||
public ScriptLogger(ITestOutputHelper output)
|
||||
: base(output)
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
_debugger = debugger;
|
||||
_lineBuffer = new StringBuilder();
|
||||
_lastCommandOutput = new StringBuilder();
|
||||
_taskQueue = new List<Task<CommandResult>>();
|
||||
AddTask();
|
||||
|
@ -1032,21 +1250,6 @@ public class SOSRunner : IDisposable
|
|||
return currentTask;
|
||||
}
|
||||
|
||||
public string ProcessCommand(string command)
|
||||
{
|
||||
switch (_debugger)
|
||||
{
|
||||
case NativeDebugger.Cdb:
|
||||
command = string.Format("!runcommand {0}", command);
|
||||
break;
|
||||
|
||||
case NativeDebugger.Lldb:
|
||||
command = string.Format("runcommand {0}", command);
|
||||
break;
|
||||
}
|
||||
return command;
|
||||
}
|
||||
|
||||
public override void Write(ProcessRunner runner, string data, ProcessStream stream)
|
||||
{
|
||||
lock (this)
|
||||
|
@ -1054,38 +1257,14 @@ public class SOSRunner : IDisposable
|
|||
base.Write(runner, data, stream);
|
||||
if (stream == ProcessStream.StandardOut)
|
||||
{
|
||||
_lastCommandOutput.Append(data);
|
||||
|
||||
string lastCommandOutput = _lastCommandOutput.ToString();
|
||||
bool commandError = false;
|
||||
bool commandEnd = false;
|
||||
|
||||
switch (_debugger)
|
||||
{
|
||||
case NativeDebugger.Cdb:
|
||||
case NativeDebugger.Lldb:
|
||||
case NativeDebugger.DotNetDump:
|
||||
commandError = lastCommandOutput.EndsWith("<END_COMMAND_ERROR>");
|
||||
commandEnd = commandError || lastCommandOutput.EndsWith("<END_COMMAND_OUTPUT>");
|
||||
break;
|
||||
case NativeDebugger.Gdb:
|
||||
commandEnd = lastCommandOutput.EndsWith("(gdb) ");
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Debugger prompt not supported");
|
||||
}
|
||||
|
||||
if (commandEnd)
|
||||
{
|
||||
FlushOutput();
|
||||
_taskSource.TrySetResult(new CommandResult(lastCommandOutput, !commandError));
|
||||
_lastCommandOutput.Clear();
|
||||
AddTask();
|
||||
}
|
||||
_lineBuffer.Append(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static readonly string s_endCommandOutput = "<END_COMMAND_OUTPUT>";
|
||||
static readonly string s_endCommandError = "<END_COMMAND_ERROR>";
|
||||
|
||||
public override void WriteLine(ProcessRunner runner, string data, ProcessStream stream)
|
||||
{
|
||||
lock (this)
|
||||
|
@ -1093,7 +1272,25 @@ public class SOSRunner : IDisposable
|
|||
base.WriteLine(runner, data, stream);
|
||||
if (stream == ProcessStream.StandardOut)
|
||||
{
|
||||
_lastCommandOutput.AppendLine(data);
|
||||
_lineBuffer.Append(data);
|
||||
string lineBuffer = _lineBuffer.ToString();
|
||||
_lineBuffer.Clear();
|
||||
|
||||
bool commandError = lineBuffer.EndsWith(s_endCommandError);
|
||||
bool commandEnd = commandError || lineBuffer.EndsWith(s_endCommandOutput);
|
||||
if (commandEnd)
|
||||
{
|
||||
FlushOutput();
|
||||
_lastCommandOutput.AppendLine();
|
||||
string lastCommandOutput = _lastCommandOutput.ToString();
|
||||
_lastCommandOutput.Clear();
|
||||
_taskSource.TrySetResult(new CommandResult(lastCommandOutput, !commandError));
|
||||
AddTask();
|
||||
}
|
||||
else
|
||||
{
|
||||
_lastCommandOutput.AppendLine(lineBuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1164,6 +1361,11 @@ public static class TestConfigurationExtensions
|
|||
return TestConfiguration.MakeCanonicalPath(config.GetValue("SOSHostRuntime"));
|
||||
}
|
||||
|
||||
public static string HostRuntimeDir(this TestConfiguration config)
|
||||
{
|
||||
return TestConfiguration.MakeCanonicalPath(config.GetValue("HostRuntimeDir"));
|
||||
}
|
||||
|
||||
public static bool GenerateDumpWithLLDB(this TestConfiguration config)
|
||||
{
|
||||
return config.GetValue("GenerateDumpWithLLDB")?.ToLowerInvariant() == "true";
|
||||
|
|
|
@ -4,11 +4,9 @@
|
|||
# 3) Take a dump of the executable.
|
||||
# 4) Open the dump and compare the output
|
||||
|
||||
LOADSOS
|
||||
|
||||
IFDEF:LIVE
|
||||
CONTINUE
|
||||
ENDIF:LIVE
|
||||
|
||||
LOADSOS
|
||||
|
||||
# Verifying that PrintException gives us the right exception in the format above.
|
||||
SOSCOMMAND:PrintException
|
||||
|
@ -24,4 +22,29 @@ VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+[Dd]iv[Zz]ero.*!C\.F3(\(.*\))?\+0x<HEXVAL>\s+
|
|||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+[Dd]iv[Zz]ero.*!C\.F2(\(.*\))?\+0x<HEXVAL>\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+[Dd]iv[Zz]ero.*!C\.Main(\(.*\))?\+0x<HEXVAL>\s+
|
||||
VERIFY:(StackTraceString: <none>\s+)?\s+
|
||||
VERIFY:HResult:\s+80020012\s+
|
||||
VERIFY:HResult:\s+80020012\s+
|
||||
|
||||
# Verify that Threads (clrthreads) works
|
||||
IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:clrthreads
|
||||
ENDIF:DOTNETDUMP
|
||||
!IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:Threads
|
||||
ENDIF:DOTNETDUMP
|
||||
VERIFY:\s*ThreadCount:\s+<DECVAL>\s+
|
||||
VERIFY:\s+UnstartedThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+BackgroundThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+PendingThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+DeadThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+Hosted Runtime:\s+no\s+
|
||||
VERIFY:\s+ID\s+OSID\s+ThreadOBJ\s+State.*\s+
|
||||
VERIFY:\s+<DECVAL>\s+<DECVAL>\s+<HEXVAL>\s+<HEXVAL>.*\s+
|
||||
|
||||
# Verify that ClrStack with no options works
|
||||
SOSCOMMAND:ClrStack
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+(\*\*\* WARNING: Unable to verify checksum for DivZero.exe\s*)?C\.DivideByZero(\(.*\))?\s+\[(?i:.*[\\|/]DivZero\.cs) @ 12\s*\]\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+C\.F3(\(.*\))?\s+\[(?i:.*[\\|/]DivZero\.cs) @ 21\s*\]\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+C\.F2(\(.*\))?\s+\[(?i:.*[\\|/]DivZero\.cs) @ 33\s*\]\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+C\.Main(\(.*\))?\s+\[(?i:.*[\\|/]DivZero\.cs) @ 54\s*\]\s+
|
|
@ -1,14 +1,12 @@
|
|||
# Overflow debugging scenario
|
||||
# Nested exception debugging scenario
|
||||
# 1) load the executable
|
||||
# 2) load sos
|
||||
# 3) run to the exception
|
||||
# 2) run to the exception
|
||||
# 3) load sos
|
||||
# We are only verifying the main PrintException fields and for the stacktrace, source lines in the program.
|
||||
|
||||
LOADSOS
|
||||
|
||||
IFDEF:LIVE
|
||||
CONTINUE
|
||||
ENDIF:LIVE
|
||||
|
||||
LOADSOS
|
||||
|
||||
# 4) Verifying that !pe gives us the right exception in the format above.
|
||||
SOSCOMMAND:PrintException
|
||||
|
@ -67,10 +65,36 @@ VERIFY:InnerException:\s+System\.FormatException, Use !PrintException <HEXVAL> t
|
|||
VERIFY:StackTrace \(generated\):
|
||||
VERIFY:\s+SP\s+IP\s+Function\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+[Nn]ested[Ee]xception[Tt]est.*!NestedExceptionTest\.Program\.Main(\(.*\))?\+0x<HEXVAL>\s*
|
||||
# Desktop sos has a bug that prevents the line number/source file info from being printed. Fixed in ProjectK.
|
||||
# Desktop sos has a bug that prevents the line number/source file info from being printed.
|
||||
IFDEF:PROJECTK
|
||||
VERIFY:\[.*[\\|/]Debuggees[\\|/](dotnet.+[\\|/])?[Nn]ested[Ee]xception[Tt]est[\\|/][Nn]ested[Ee]xception[Tt]est\.cs @ 8\s*\]\s*
|
||||
ENDIF:PROJECTK
|
||||
VERIFY:(StackTraceString: <none>\s+)?
|
||||
VERIFY:HResult:\s+80131509\s+
|
||||
VERIFY:There are nested exceptions on this thread. Run with -nested for details
|
||||
|
||||
# Verify that Threads (clrthreads) works
|
||||
IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:clrthreads
|
||||
ENDIF:DOTNETDUMP
|
||||
!IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:Threads
|
||||
ENDIF:DOTNETDUMP
|
||||
VERIFY:\s*ThreadCount:\s+<DECVAL>\s+
|
||||
VERIFY:\s+UnstartedThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+BackgroundThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+PendingThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+DeadThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+Hosted Runtime:\s+no\s+
|
||||
VERIFY:\s+ID\s+OSID\s+ThreadOBJ\s+State.*\s+
|
||||
VERIFY:\s+<DECVAL>\s+<DECVAL>\s+<HEXVAL>\s+<HEXVAL>.*\s+
|
||||
|
||||
# Verify that ClrStack with no options works
|
||||
SOSCOMMAND:ClrStack
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+NestedExceptionTest\.Program\.Main(\(.*\))?\s*
|
||||
# Desktop sos has a bug that prevents the line number/source file info from being printed.
|
||||
IFDEF:PROJECTK
|
||||
VERIFY:\[.*[\\|/]Debuggees[\\|/](dotnet.+[\\|/])?[Nn]ested[Ee]xception[Tt]est[\\|/][Nn]ested[Ee]xception[Tt]est\.cs @ 8\s*\]\s*
|
||||
ENDIF:PROJECTK
|
|
@ -0,0 +1,86 @@
|
|||
#
|
||||
# Tests the various SOS commands with the SymbolTestApp debuggee
|
||||
#
|
||||
|
||||
CONTINUE
|
||||
|
||||
LOADSOS
|
||||
|
||||
IFDEF:DOTNETDUMP
|
||||
COMMAND:clrmodules
|
||||
VERIFY:\s*<HEXVAL>.*
|
||||
COMMAND:modules
|
||||
VERIFY:\s*<HEXVAL>\s+<HEXVAL>.*
|
||||
COMMAND:threads
|
||||
VERIFY:\s*<DECVAL>\s+0x<HEXVAL>\s+\(<DECVAL>\)\s+
|
||||
COMMAND:registers
|
||||
VERIFY:\s*([r|e]ip|pc) = <HEXVAL>\s+
|
||||
ENDIF:DOTNETDUMP
|
||||
|
||||
# Issue: https://github.com/dotnet/diagnostics/issues/503
|
||||
!IFDEF:ALPINE
|
||||
SOSCOMMAND:DumpHeap
|
||||
VERIFY:\s+Address\s+MT\s+Size\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+<DECVAL>.*
|
||||
VERIFY:\s*Statistics:\s+
|
||||
VERIFY:\s+MT\s+Count\s+TotalSize\s+Class Name\s+
|
||||
VERIFY:\s*<HEXVAL>\s+<DECVAL>\s+<DECVAL>\s+.*
|
||||
VERIFY:\s*Total\s+<DECVAL>\s+objects\s+
|
||||
ENDIF:ALPINE
|
||||
|
||||
SOSCOMMAND:DumpDomain
|
||||
VERIFY:\s*System Domain:\s+<HEXVAL>\s+
|
||||
VERIFY:\s*LowFrequencyHeap:\s+<HEXVAL>\s+
|
||||
VERIFY:\s*HighFrequencyHeap:\s+<HEXVAL>\s+
|
||||
VERIFY:\s*Domain 1:\s+<HEXVAL>\s+
|
||||
VERIFY:\s*Assembly:\s+<HEXVAL>\s+\[.*(System\.Private\.CoreLib(\.ni)?\.dll|mscorlib.dll)\]\s+
|
||||
|
||||
SOSCOMMAND:DumpAssembly <POUT>\s*Assembly:\s+(<HEXVAL>)\s+\[.*<POUT>
|
||||
VERIFY:\s*Parent Domain:\s+<HEXVAL>\s+
|
||||
VERIFY:\s*Name:\s+.*(System\.Private\.CoreLib(\.ni)?\.dll|mscorlib.dll)\s+
|
||||
|
||||
SOSCOMMAND:DumpModule <POUT>\s+Module Name\s+(<HEXVAL>)\s+.*<POUT>
|
||||
!IFDEF:DESKTOP
|
||||
VERIFY:\s*PEFile:\s+<HEXVAL>\s+
|
||||
VERIFY:\s*ModuleId:\s+<HEXVAL>\s+
|
||||
ENDIF:DESKTOP
|
||||
VERIFY:\s*LoaderHeap:\s+<HEXVAL>\s+
|
||||
VERIFY:\s*TypeDefToMethodTableMap:\s+<HEXVAL>\s+
|
||||
|
||||
# Verify that IP2MD, DumpMD, DumpClass and DumpMT (uses IP from ClrStack)
|
||||
SOSCOMMAND:ClrStack
|
||||
SOSCOMMAND:IP2MD <POUT>.*\s+(<HEXVAL>)\s+SymbolTestApp\.Program\.Foo1.*\s+<POUT>
|
||||
VERIFY:.*\s+Method Name:\s+SymbolTestApp\.Program\.Foo1\(Int32, System\.String\)\s+
|
||||
VERIFY:.*\s+Source file:\s+(?i:.*[\\|/]SymbolTestApp\.cs) @ 24\s+
|
||||
|
||||
# Verify DumpMD
|
||||
SOSCOMMAND:DumpMD <POUT>\s+MethodDesc:\s+(<HEXVAL>)\s+<POUT>
|
||||
VERIFY:.*\s+Method Name:\s+SymbolTestApp\.Program\.Foo1\(Int32, System\.String\)\s+
|
||||
|
||||
# Verify DumpClass
|
||||
SOSCOMMAND:DumpClass <POUT>\s*Class:\s+(<HEXVAL>)\s+<POUT>
|
||||
VERIFY:\s*Class Name:\s+SymbolTestApp.Program\s+
|
||||
VERIFY:\s*File:\s+.*SymbolTestApp\.(dll|exe)\s+
|
||||
|
||||
# Verify DumpMT
|
||||
SOSCOMMAND:DumpMT <POUT>\s*Method Table:\s+(<HEXVAL>)\s+<POUT>
|
||||
VERIFY:\s*Name:\s+SymbolTestApp.Program\s+
|
||||
VERIFY:\s*File:\s+.*SymbolTestApp\.(dll|exe)\s+
|
||||
|
||||
SOSCOMMAND:FinalizeQueue
|
||||
VERIFY:\s*SyncBlocks to be cleaned up:\s+<DECVAL>\s+
|
||||
VERIFY:(\s*Free-Threaded Interfaces to be released:\s+<DECVAL>\s+)?
|
||||
VERIFY:\s*Statistics for all finalizable objects.*:\s+
|
||||
VERIFY:\s+MT\s+Count\s+TotalSize\s+Class Name\s+
|
||||
VERIFY:(\s*<HEXVAL>\s+<DECVAL>\s+<DECVAL>\s+.*)?
|
||||
VERIFY:\s*Total\s+<DECVAL>\s+objects\s+
|
||||
|
||||
SOSCOMMAND:SyncBlk
|
||||
!IFDEF:LINUX
|
||||
VERIFY:\s*Index\s+SyncBlock\s+MonitorHeld\s+Recursion\s+Owning\s+Thread\s+Info\s+SyncBlock\s+Owner\s+
|
||||
VERIFY:\s*Total\s+<DECVAL>
|
||||
IFDEF:WINDOWS
|
||||
VERIFY:\s*CCW\s+<DECVAL>
|
||||
VERIFY:\s*RCW\s+<DECVAL>
|
||||
ENDIF:WINDOWS
|
||||
ENDIF:LINUX
|
|
@ -1,15 +1,13 @@
|
|||
# Overflow debugging scenario
|
||||
# 1) load the executable
|
||||
# 1) Load the executable
|
||||
# 2) Run the executable and wait for it to crash
|
||||
# 3) Take a dump of the executable.
|
||||
# 4) Open the dump and compare the output
|
||||
# We do not expect that there is a managed exception since overflow is a special exception.
|
||||
|
||||
LOADSOS
|
||||
|
||||
IFDEF:LIVE
|
||||
CONTINUE
|
||||
ENDIF:LIVE
|
||||
|
||||
LOADSOS
|
||||
|
||||
# 5) Verifying that PrintException gives us the right exception in the format above.
|
||||
SOSCOMMAND:PrintException
|
||||
|
|
|
@ -5,11 +5,9 @@
|
|||
# 4) Open the dump and compare the output
|
||||
# We are only verifying the main PrintException fields and for the stacktrace, source lines in the program.
|
||||
|
||||
LOADSOS
|
||||
|
||||
IFDEF:LIVE
|
||||
CONTINUE
|
||||
ENDIF:LIVE
|
||||
|
||||
LOADSOS
|
||||
|
||||
# 5) Verifying that !pe gives us the right exception in the format above.
|
||||
SOSCOMMAND:PrintException
|
||||
|
@ -40,9 +38,35 @@ VERIFY:Message:\s+(<Invalid Object>|Exception has been thrown by the target of a
|
|||
VERIFY:InnerException:\s+System\.Exception, Use !PrintException <HEXVAL> to see more\.\s+
|
||||
VERIFY:StackTrace \(generated\):\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+[Rr]eflection[Tt]est.*!(\$0_)?RefLoader\.Loader\.Main(\(\))?\+0x<HEXVAL>\s*
|
||||
# Desktop sos has a bug that prevents the line number/source file info from being printed. Fixed in ProjectK.
|
||||
# Desktop sos has a bug that prevents the line number/source file info from being printed.
|
||||
IFDEF:PROJECTK
|
||||
VERIFY:[.*[\\|/]Debuggees[\\|/](dotnet.+[\\|/])?[Rr]eflection[Tt]est[\\|/][Rr]eflection[Tt]est\.cs @ 32\s*\]
|
||||
ENDIF:PROJECTK
|
||||
VERIFY:(StackTraceString: <none>\s+)?
|
||||
VERIFY:HResult:\s+80131604
|
||||
VERIFY:HResult:\s+80131604
|
||||
|
||||
# Verify that Threads (clrthreads) works
|
||||
IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:clrthreads
|
||||
ENDIF:DOTNETDUMP
|
||||
!IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:Threads
|
||||
ENDIF:DOTNETDUMP
|
||||
VERIFY:\s*ThreadCount:\s+<DECVAL>\s+
|
||||
VERIFY:\s+UnstartedThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+BackgroundThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+PendingThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+DeadThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+Hosted Runtime:\s+no\s+
|
||||
VERIFY:\s+ID\s+OSID\s+ThreadOBJ\s+State.*\s+
|
||||
VERIFY:\s+<DECVAL>\s+<DECVAL>\s+<HEXVAL>\s+<HEXVAL>.*\s+
|
||||
|
||||
# Verify that ClrStack with no options works
|
||||
SOSCOMMAND:ClrStack
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+(\*\*\* WARNING: Unable to verify checksum for ReflectionTest.exe\s*)?RefLoader\.Loader\.Main(\(\))?\s*
|
||||
# Desktop sos has a bug that prevents the line number/source file info from being printed.
|
||||
IFDEF:PROJECTK
|
||||
VERIFY:[.*[\\|/]Debuggees[\\|/](dotnet.+[\\|/])?[Rr]eflection[Tt]est[\\|/][Rr]eflection[Tt]est\.cs @ 32\s*\]
|
||||
ENDIF:PROJECTK
|
|
@ -1,38 +1,13 @@
|
|||
# PrintException debugging scenario
|
||||
# 1) load the executable
|
||||
# 1) Load the executable
|
||||
# 2) Run the executable and wait for it to crash
|
||||
# 3) Take a dump of the executable. (MUST BE AT SECOND CHANCE EXCEPTION!)
|
||||
# 4) Open the dump and compare the output
|
||||
# [EXPECTED OUTPUT (DESKTOP)]
|
||||
# Exception object: <HEXVAL>
|
||||
# Exception type: System.InvalidOperationException
|
||||
# Message: <Invalid Object>
|
||||
# InnerException: <none>
|
||||
# StackTrace (generated):
|
||||
# SP IP Function
|
||||
# <HEXVAL> <HEXVAL> SimpleThrow!UserObject.UseObject(System.String)+0xc8
|
||||
# <HEXVAL> <HEXVAL> SimpleThrow!Simple.Main()+0x9f
|
||||
# StackTraceString: <none>
|
||||
# HResult: 80131509
|
||||
|
||||
# [EXPECTED OUTPUT (PROJECTN)]
|
||||
# Exception type: System.InvalidOperationException
|
||||
# Message: <Invalid Object>
|
||||
# InnerException: <none>
|
||||
# StackTrace (generated):
|
||||
# IP Function
|
||||
# <HEXVAL> SimpleThrow_<HEXVAL>!$0_UserObject.UseObject+0x8a
|
||||
# <HEXVAL> SimpleThrow_<HEXVAL>!$0_Simple.Main+0x66
|
||||
# <HEXVAL> SimpleThrow_<HEXVAL>!$0_Simple.{ILT$Main}+0xd
|
||||
# <HEXVAL> SimpleThrow_<HEXVAL>!RHBinder__ShimExeMain+0x20
|
||||
# HResult: 80131509
|
||||
CONTINUE
|
||||
|
||||
LOADSOS
|
||||
|
||||
IFDEF:LIVE
|
||||
CONTINUE
|
||||
ENDIF:LIVE
|
||||
|
||||
# B) Verifying that !pe gives us the right exception in the format above.
|
||||
# For desktop, it has an SP, so we conditionally will match it. (ProjectN does not though.)
|
||||
SOSCOMMAND:PrintException
|
||||
|
@ -57,3 +32,33 @@ VERIFY:\s+SP\s+IP\s+Function\s+
|
|||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+[Ss]imple[Tt]hrow.*!(\$0_)?UserObject\.UseObject.*\+0x<HEXVAL>\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+[Ss]imple[Tt]hrow.*!(\$0_)?Simple\.Main.*\+0x<HEXVAL>\s+
|
||||
VERIFY:HResult:\s+80131509
|
||||
|
||||
# Verify that Threads (clrthreads) works
|
||||
IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:clrthreads
|
||||
ENDIF:DOTNETDUMP
|
||||
!IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:Threads
|
||||
ENDIF:DOTNETDUMP
|
||||
VERIFY:\s*ThreadCount:\s+<DECVAL>\s+
|
||||
VERIFY:\s+UnstartedThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+BackgroundThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+PendingThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+DeadThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+Hosted Runtime:\s+no\s+
|
||||
VERIFY:\s+ID\s+OSID\s+ThreadOBJ\s+State.*\s+
|
||||
VERIFY:\s+<DECVAL>\s+<DECVAL>\s+<HEXVAL>\s+<HEXVAL>.*\s+
|
||||
|
||||
# Verify that ClrStack with no options works
|
||||
SOSCOMMAND:ClrStack
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+(\*\*\* WARNING: Unable to verify checksum for SimpleThrow.exe\s*)?UserObject\.UseObject.*\s+
|
||||
# Desktop sos has a bug that prevents the line number/source file info from being printed.
|
||||
IFDEF:PROJECTK
|
||||
VERIFY:[.*[\\|/]Debuggees[\\|/](dotnet.+[\\|/])?SimpleThrow[\\|/]UserObject\.cs @ 18\s*\]
|
||||
ENDIF:PROJECTK
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+Simple\.Main\(\)\s+
|
||||
IFDEF:PROJECTK
|
||||
VERIFY:[.*[\\|/]Debuggees[\\|/](dotnet.+[\\|/])?SimpleThrow[\\|/]SimpleThrow\.cs @ 9\s*\]
|
||||
ENDIF:PROJECTK
|
|
@ -1,13 +1,12 @@
|
|||
#
|
||||
# Tests the various SOS stack and other commands with the Windows/Portable PDB debuggee
|
||||
#
|
||||
# Commands Verified: ClrStack, DumpStackObjects, DumpStack, EEStack, IP2MD, u, Name2EE, Threads (clrthreads)
|
||||
# Commands Verified: ClrStack, DumpStackObjects, DumpStack, EEStack, IP2MD, u, Name2EE, Threads (clrthreads) and others
|
||||
#
|
||||
LOADSOS
|
||||
|
||||
IFDEF:LIVE
|
||||
CONTINUE
|
||||
ENDIF:LIVE
|
||||
|
||||
LOADSOS
|
||||
|
||||
# Verify that ClrStack with no options works
|
||||
SOSCOMMAND:SetSymbolServer -ms
|
||||
|
@ -17,7 +16,7 @@ ENDIF:DOTNETDUMP
|
|||
SOSCOMMAND:ClrStack
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>.*\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 54\]\s*
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>.*\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ (50|54)\]\s*
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.Program\.Foo2\(.*\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 29\]\s*
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.Program\.Foo1\(.*\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 24\]\s*
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.Program\.Main\(.*\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 19\]\s*
|
||||
|
@ -32,7 +31,7 @@ IFDEF:PROJECTK
|
|||
SOSCOMMAND:ClrStack -f
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.(dll|exe)!SymbolTestApp\.Program\.Foo4\(System\.String\)\s+\+\s+<DECVAL>\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 54\]\s*
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.(dll|exe)!SymbolTestApp\.Program\.Foo4\(System\.String\)\s+\+\s+<DECVAL>\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ (50|54)\]\s*
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.(dll|exe)!SymbolTestApp\.Program\.Foo2\(.*\)\s+\+\s+<DECVAL>\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 29\]\s*
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.(dll|exe)!SymbolTestApp\.Program\.Foo1\(.*\)\s+\+\s+<DECVAL>\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 24\]\s*
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.(dll|exe)!SymbolTestApp\.Program\.Main\(.*\)\s+\+\s+<DECVAL>\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 19\]\s*
|
||||
|
@ -43,7 +42,7 @@ IFDEF:PROJECTK
|
|||
SOSCOMMAND:ClrStack -a
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 54\]\s*
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ (50|54)\]\s*
|
||||
VERIFY:\s+PARAMETERS:\s+
|
||||
VERIFY:\s+dllPath \(0x<HEXVAL>\) = 0x<HEXVAL>\s+
|
||||
VERIFY:.*\s+LOCALS:\s+
|
||||
|
@ -59,7 +58,7 @@ SOSCOMMAND:ClrStack -r
|
|||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ 54\]\s*
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+\[(?i:.*[\\|/]SymbolTestApp\.cs) @ (50|54)\]\s*
|
||||
IFDEF:ARM
|
||||
VERIFY:\s+r0=<HEXVAL>\s+r1=<HEXVAL>\s+r2=<HEXVAL>\s+
|
||||
ENDIF:ARM
|
||||
|
@ -106,6 +105,7 @@ VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[DEFAULT\] Void SymbolTestApp\.Program\.Main\
|
|||
VERIFY:.*\s+Stack walk complete.\s+
|
||||
ENDIF:PROJECTK
|
||||
|
||||
# Issue: https://github.com/dotnet/diagnostics/issues/504
|
||||
!IFDEF:ALPINE
|
||||
|
||||
# Verify that ClrStack with the ICorDebug options and all option (locals/params) works
|
||||
|
@ -118,7 +118,9 @@ VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[DEFAULT\] Void SymbolTestApp\.Program\.Foo4\
|
|||
VERIFY:\s+PARAMETERS:\s+
|
||||
VERIFY:\s+\+ string dllPath\s+=\s+".*"\s+
|
||||
VERIFY:\s+LOCALS:\s+
|
||||
!IFDEF:MAJOR_RUNTIME_VERSION_1
|
||||
VERIFY:\s+\+ System.RuntimeType dllType @ 0x<HEXVAL>
|
||||
ENDIF:MAJOR_RUNTIME_VERSION_1
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[DEFAULT\] I4 SymbolTestApp\.Program\.Foo2\(.*\)\s+\(.*\)\s+
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[DEFAULT\] I4 SymbolTestApp\.Program\.Foo1\(.*\)\s+\(.*\)\s+
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[DEFAULT\] Void SymbolTestApp\.Program\.Main\(.*\)\s+\(.*\)\s+
|
||||
|
@ -174,11 +176,17 @@ ENDIF:DOTNETDUMP
|
|||
SOSCOMMAND:ClrStack
|
||||
SOSCOMMAND:IP2MD <POUT>.*\s+(<HEXVAL>)\s+SymbolTestApp\.Program\.Foo4.*\s+<POUT>
|
||||
VERIFY:.*\s+Method Name:\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+
|
||||
VERIFY:.*\s+Source file:\s+(?i:.*[\\|/]SymbolTestApp\.cs) @ 54\s+
|
||||
VERIFY:.*\s+Source file:\s+(?i:.*[\\|/]SymbolTestApp\.cs) @ (50|54)\s+
|
||||
|
||||
# Verify that DumpIL works (depends on the IP2MD right above)
|
||||
SOSCOMMAND:DumpIL <POUT>\s*MethodDesc:\s+(<HEXVAL>)\s*<POUT>
|
||||
VERIFY:.*IL_<HEXVAL>: call class \[System.Runtime\]System\.Reflection\.Assembly System\.Reflection\.Assembly::Load\(uint8\[\],uint8\[\]\)
|
||||
!IFDEF:DESKTOP
|
||||
VERIFY:.*IL_<HEXVAL>: callvirt class \[System\.(Runtime|Reflection)\]System\.Reflection\.Assembly System\.Runtime\.Loader\.AssemblyLoadContext::LoadFromStream\(class \[System\.(Runtime|IO)\]System\.IO\.Stream,class \[System\.(Runtime|IO)\]System\.IO\.Stream\)
|
||||
ENDIF:DESKTOP
|
||||
IFDEF:DESKTOP
|
||||
# Disable until the new SOS supports desktop clr
|
||||
# VERIFY:.*IL_<HEXVAL>: call class \[System.Runtime\]System\.Reflection\.Assembly System\.Reflection\.Assembly::Load\(uint8\[\],uint8\[\]\)
|
||||
ENDIF:DESKTOP
|
||||
|
||||
!IFDEF:DOTNETDUMP
|
||||
IFDEF:PROJECTK
|
||||
|
@ -190,7 +198,7 @@ SOSCOMMAND:u <POUT>\s*MethodDesc:\s+(<HEXVAL>)\s*<POUT>
|
|||
VERIFY:\s*Normal JIT generated code\s+
|
||||
VERIFY:\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+
|
||||
VERIFY:\s+Begin\s+<HEXVAL>,\s+size\s+<HEXVAL>\s+
|
||||
VERIFY:\s+(?i:.*[\\|/]SymbolTestApp\.cs) @ 54:\s+
|
||||
VERIFY:\s+(?i:.*[\\|/]SymbolTestApp\.cs) @ (50|54):\s+
|
||||
|
||||
# Verify that "u" with no line info works
|
||||
SOSCOMMAND:u -n <PREVPOUT>
|
||||
|
@ -203,7 +211,7 @@ SOSCOMMAND:u -o <PREVPOUT>
|
|||
VERIFY:\s*Normal JIT generated code\s+
|
||||
VERIFY:\s+SymbolTestApp\.Program\.Foo4\(System\.String\)\s+
|
||||
VERIFY:\s+Begin\s+<HEXVAL>,\s+size\s+<HEXVAL>\s+
|
||||
VERIFY:\s+(?i:.*[\\|/]SymbolTestApp\.cs) @ 54:\s+
|
||||
VERIFY:\s+(?i:.*[\\|/]SymbolTestApp\.cs) @ (50|54):\s+
|
||||
|
||||
ENDIF:PROJECTK
|
||||
ENDIF:DOTNETDUMP
|
||||
|
@ -231,4 +239,4 @@ VERIFY:\s+PendingThread:\s+<DECVAL>\s+
|
|||
VERIFY:\s+DeadThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+Hosted Runtime:\s+no\s+
|
||||
VERIFY:\s+ID\s+OSID\s+ThreadOBJ\s+State.*\s+
|
||||
VERIFY:\s+<DECVAL>\s+<DECVAL>\s+<HEXVAL>\s+<HEXVAL>.*\s+
|
||||
VERIFY:\s+<DECVAL>\s+<DECVAL>\s+<HEXVAL>\s+<HEXVAL>.*\s+
|
|
@ -1,11 +1,10 @@
|
|||
#
|
||||
# Tests the various SOS stack commands against a debuggee that hit an exception
|
||||
#
|
||||
LOADSOS
|
||||
|
||||
IFDEF:LIVE
|
||||
CONTINUE
|
||||
ENDIF:LIVE
|
||||
|
||||
LOADSOS
|
||||
|
||||
# Test eeversion command
|
||||
SOSCOMMAND:EEVersion
|
||||
|
@ -94,7 +93,11 @@ ENDIF:X86
|
|||
ENDIF:64BIT
|
||||
ENDIF:PROJECTK
|
||||
|
||||
# Issue: https://github.com/dotnet/diagnostics/issues/504
|
||||
!IFDEF:ALPINE
|
||||
|
||||
# 5) Verifying that ClrStack with the ICorDebug options works
|
||||
IFDEF:PROJECTK
|
||||
SOSCOMMAND:ClrStack -i
|
||||
VERIFY:.*\s+Dumping managed stack and managed variables using ICorDebug.\s+
|
||||
VERIFY:.*\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
|
@ -102,9 +105,9 @@ VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[NativeStackFrame\]\s+
|
|||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[DEFAULT\] Void NestedExceptionTest\.Program\.Main\(.*\)\s+\(.*\)\s+
|
||||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[DEFAULT\] Void NestedExceptionTest\.Program\.Main\(.*\)\s+\(.*\)\s+
|
||||
VERIFY:.*\s+Stack walk complete.\s+
|
||||
ENDIF:PROJECTK
|
||||
|
||||
# 6) Verifying that ClrStack with the ICorDebug options and all option (locals/params) works
|
||||
!IFDEF:ALPINE
|
||||
IFDEF:PROJECTK
|
||||
SOSCOMMAND:ClrStack -i -a
|
||||
VERIFY:.*\s+Dumping managed stack and managed variables using ICorDebug.\s+
|
||||
|
@ -118,6 +121,7 @@ VERIFY:\s+\+ System.FormatException ex @ 0x<HEXVAL>\s+
|
|||
VERIFY:.*\s+<HEXVAL>\s+<HEXVAL>\s+\[DEFAULT\] Void NestedExceptionTest\.Program\.Main\(.*\)\s+\(.*\)\s+
|
||||
VERIFY:.*\s+Stack walk complete.\s+
|
||||
ENDIF:PROJECTK
|
||||
|
||||
ENDIF:ALPINE
|
||||
|
||||
# 7) Verify DumpStackObjects works
|
||||
|
|
|
@ -5,11 +5,9 @@
|
|||
# 4) Open the dump and compare the output
|
||||
# This tests that a nested task, when throwing an exception, you can access all of its properties.
|
||||
|
||||
LOADSOS
|
||||
|
||||
IFDEF:LIVE
|
||||
CONTINUE
|
||||
ENDIF:LIVE
|
||||
|
||||
LOADSOS
|
||||
|
||||
SOSCOMMAND:PrintException
|
||||
VERIFY:Exception object:\s+<HEXVAL>\s+
|
||||
|
@ -44,10 +42,14 @@ VERIFY:StackTrace \(generated\):\s+
|
|||
VERIFY:\s+SP\s+IP\s+Function\s+
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>.+RandomTest(::|\.)RandomUserTask\.InnerException(\(\))?\+0x<HEXVAL>\s*
|
||||
# Desktop sos has a bug that prevents the line number/source file info from being printed. Fixed in ProjectK.
|
||||
IFDEF:PROJECTK
|
||||
!IFDEF:DESKTOP
|
||||
!IFDEF:TRIAGE_DUMP
|
||||
VERIFY:[.+[\\|/]Debuggees[\\|/](dotnet.+[\\|/])?[Tt]ask[Nn]ested[Ee]xception[\\|/][Rr]andom[Uu]ser[Ll]ibrary[\\|/][Rr]andom[Uu]ser[Tt]ask\.cs @ 34\]
|
||||
ENDIF:PROJECTK
|
||||
ENDIF:TRIAGE_DUMP
|
||||
ENDIF:DESKTOP
|
||||
VERIFY:\s+<HEXVAL>\s+<HEXVAL>.+RandomTest(::|\.)RandomUserTask\.<\.ctor>.+\+0x<HEXVAL>\s*
|
||||
IFDEF:PROJECTK
|
||||
!IFDEF:DESKTOP
|
||||
!IFDEF:TRIAGE_DUMP
|
||||
VERIFY:[.+[\\|/]Debuggees[\\|/](dotnet.+[\\|/])?[Tt]ask[Nn]ested[Ee]xception[\\|/][Rr]andom[Uu]ser[Ll]ibrary[\\|/][Rr]andom[Uu]ser[Tt]ask\.cs @ 19\]
|
||||
ENDIF:PROJECTK
|
||||
ENDIF:TRIAGE_DUMP
|
||||
ENDIF:DESKTOP
|
|
@ -0,0 +1,163 @@
|
|||
#
|
||||
# Tests the various SOS stack and other commands against a webapp 3.x app
|
||||
#
|
||||
# Commands Verified: ClrStack, DumpStackObjects, DumpStack, EEStack, IP2MD, u, Name2EE, Threads (clrthreads)
|
||||
#
|
||||
|
||||
CONTINUE
|
||||
|
||||
LOADSOS
|
||||
|
||||
SOSCOMMAND:SetSymbolServer -ms
|
||||
|
||||
!IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:SetHostRuntime
|
||||
ENDIF:DOTNETDUMP
|
||||
|
||||
IFDEF:DOTNETDUMP
|
||||
COMMAND:clrmodules
|
||||
VERIFY:\s*<HEXVAL>.*
|
||||
COMMAND:modules
|
||||
VERIFY:\s*<HEXVAL>\s+<HEXVAL>.*
|
||||
COMMAND:threads
|
||||
VERIFY:\s*<DECVAL>\s+0x<HEXVAL>\s+\(<DECVAL>\)\s+
|
||||
COMMAND:registers
|
||||
VERIFY:\s*([r|e]ip|pc) = <HEXVAL>\s+
|
||||
ENDIF:DOTNETDUMP
|
||||
|
||||
# Verify that ClrStack with no options works
|
||||
SOSCOMMAND:ClrStack
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
|
||||
# Verify that ClrStack for all threads works
|
||||
SOSCOMMAND:ClrStack -all
|
||||
|
||||
# Verify that ClrStack with managed/native mixed works
|
||||
SOSCOMMAND:ClrStack -f
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
|
||||
# Verify that ClrStack all option works (locals/params)
|
||||
SOSCOMMAND:ClrStack -a
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
|
||||
# Verify that ClrStack displays registers
|
||||
SOSCOMMAND:ClrStack -r
|
||||
VERIFY:.*OS Thread Id:\s+0x<HEXVAL>\s+.*
|
||||
VERIFY:\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:.*\s
|
||||
|
||||
IFDEF:ARM
|
||||
VERIFY:\s+r0=<HEXVAL>\s+r1=<HEXVAL>\s+r2=<HEXVAL>\s+
|
||||
ENDIF:ARM
|
||||
IFDEF:ARM64
|
||||
VERIFY:\s+x0=<HEXVAL>\s+x1=<HEXVAL>\s+x2=<HEXVAL>\s+
|
||||
ENDIF:ARM64
|
||||
VERIFY:\s+([r|e]sp|sp)=<HEXVAL>\s+([r|e]bp|lr)=<HEXVAL>\s+([r|e]ip|pc)=<HEXVAL>\s+
|
||||
IFDEF:X64
|
||||
VERIFY:\s+rax=<HEXVAL>\s+rbx=<HEXVAL>\s+rcx=<HEXVAL>\s+
|
||||
ENDIF:X64
|
||||
IFDEF:X86
|
||||
VERIFY:\s+eax=<HEXVAL>\s+ebx=<HEXVAL>\s+ecx=<HEXVAL>\s+
|
||||
ENDIF:X86
|
||||
|
||||
VERIFY:.*\s
|
||||
|
||||
IFDEF:ARM
|
||||
VERIFY:\s+r0=<HEXVAL>\s+r1=<HEXVAL>\s+r2=<HEXVAL>\s+
|
||||
ENDIF:ARM
|
||||
IFDEF:ARM64
|
||||
VERIFY:\s+x0=<HEXVAL>\s+x1=<HEXVAL>\s+x2=<HEXVAL>\s+
|
||||
ENDIF:ARM64
|
||||
VERIFY:\s+([r|e]sp|sp)=<HEXVAL>\s+([r|e]bp|lr)=<HEXVAL>\s+([r|e]ip|pc)=<HEXVAL>\s+
|
||||
IFDEF:X64
|
||||
VERIFY:\s+rax=<HEXVAL>\s+rbx=<HEXVAL>\s+rcx=<HEXVAL>\s+
|
||||
ENDIF:X64
|
||||
IFDEF:X86
|
||||
VERIFY:\s+eax=<HEXVAL>\s+ebx=<HEXVAL>\s+ecx=<HEXVAL>\s+
|
||||
ENDIF:X86
|
||||
|
||||
# Issue: https://github.com/dotnet/diagnostics/issues/504
|
||||
!IFDEF:ALPINE
|
||||
|
||||
# Verify that ClrStack with the ICorDebug options works
|
||||
SOSCOMMAND:ClrStack -i
|
||||
VERIFY:.*\s+Dumping managed stack and managed variables using ICorDebug.\s+
|
||||
VERIFY:.*\s+Child\s+SP\s+IP\s+Call Site\s+
|
||||
VERIFY:.*\s+Stack walk complete.\s+
|
||||
|
||||
ENDIF:ALPINE
|
||||
|
||||
# Verify that Threads (clrthreads) works
|
||||
IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:clrthreads
|
||||
ENDIF:DOTNETDUMP
|
||||
!IFDEF:DOTNETDUMP
|
||||
SOSCOMMAND:Threads
|
||||
ENDIF:DOTNETDUMP
|
||||
VERIFY:\s*ThreadCount:\s+<DECVAL>\s+
|
||||
VERIFY:\s+UnstartedThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+BackgroundThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+PendingThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+DeadThread:\s+<DECVAL>\s+
|
||||
VERIFY:\s+Hosted Runtime:\s+no\s+
|
||||
VERIFY:\s+ID\s+OSID\s+ThreadOBJ\s+State.*\s+
|
||||
VERIFY:\s+<DECVAL>\s+<DECVAL>\s+<HEXVAL>\s+<HEXVAL>.*\s+
|
||||
|
||||
# dumpheap, dumpasync may not work on Windows and Alpine dotnet-dump
|
||||
# Issue: https://github.com/dotnet/diagnostics/issues/503
|
||||
!IFDEF:DOTNETDUMP
|
||||
|
||||
SOSCOMMAND:DumpHeap -stat
|
||||
VERIFY:\s*Statistics:\s+
|
||||
VERIFY:\s+MT\s+Count\s+TotalSize\s+Class Name\s+
|
||||
VERIFY:\s*<HEXVAL>\s+<DECVAL>\s+<DECVAL>\s+.*
|
||||
VERIFY:\s*Total\s+<DECVAL>\s+objects\s+
|
||||
!VERIFY:.*UNKNOWN.*
|
||||
|
||||
SOSCOMMAND:DumpAsync
|
||||
VERIFY:\s*Statistics:\s+
|
||||
VERIFY:\s+MT\s+Count\s+TotalSize\s+Class Name\s+
|
||||
VERIFY:\s*<HEXVAL>\s+<DECVAL>\s+<DECVAL>\s+.*
|
||||
VERIFY:\s*Total\s+<DECVAL>\s+objects\s+
|
||||
|
||||
SOSCOMMAND:DumpAsync -mt <POUT>\s+MT\s+Count\s+TotalSize\s+Class Name\s+(<HEXVAL>)\s+<DECVAL>\s+<DECVAL>\s+.*<POUT>
|
||||
VERIFY:\s*Statistics:\s+
|
||||
VERIFY:\s+MT\s+Count\s+TotalSize\s+Class Name\s+
|
||||
VERIFY:\s*<HEXVAL>\s+<DECVAL>\s+<DECVAL>\s+.*
|
||||
VERIFY:\s*Total\s+<DECVAL>\s+objects\s+
|
||||
|
||||
SOSCOMMAND:DumpAsync -mt <PREVOUT> -fields
|
||||
|
||||
ENDIF:DOTNETDUMP
|
||||
|
||||
# This duplication allows these commands to run on lldb/xplat
|
||||
# Issue: https://github.com/dotnet/diagnostics/issues/503
|
||||
!IFDEF:ALPINE
|
||||
!IFDEF:WINDOWS
|
||||
|
||||
SOSCOMMAND:DumpHeap -stat
|
||||
VERIFY:\s*Statistics:\s+
|
||||
VERIFY:\s+MT\s+Count\s+TotalSize\s+Class Name\s+
|
||||
VERIFY:\s*<HEXVAL>\s+<DECVAL>\s+<DECVAL>\s+.*
|
||||
VERIFY:\s*Total\s+<DECVAL>\s+objects\s+
|
||||
!VERIFY:.*UNKNOWN.*
|
||||
|
||||
SOSCOMMAND:DumpAsync
|
||||
VERIFY:\s*Statistics:\s+
|
||||
VERIFY:\s+MT\s+Count\s+TotalSize\s+Class Name\s+
|
||||
VERIFY:\s*<HEXVAL>\s+<DECVAL>\s+<DECVAL>\s+.*
|
||||
VERIFY:\s*Total\s+<DECVAL>\s+objects\s+
|
||||
|
||||
SOSCOMMAND:DumpAsync -mt <POUT>\s+MT\s+Count\s+TotalSize\s+Class Name\s+(<HEXVAL>)\s+<DECVAL>\s+<DECVAL>\s+.*<POUT>
|
||||
VERIFY:\s*Statistics:\s+
|
||||
VERIFY:\s+MT\s+Count\s+TotalSize\s+Class Name\s+
|
||||
VERIFY:\s*<HEXVAL>\s+<DECVAL>\s+<DECVAL>\s+.*
|
||||
VERIFY:\s*Total\s+<DECVAL>\s+objects\s+
|
||||
|
||||
SOSCOMMAND:DumpAsync -mt <PREVOUT> -fields
|
||||
|
||||
ENDIF:WINDOWS
|
||||
ENDIF:ALPINE
|
|
@ -151,7 +151,12 @@ DataTarget::ReadVirtual(
|
|||
}
|
||||
}
|
||||
#endif
|
||||
return g_ExtData->ReadVirtual(address, (PVOID)buffer, request, (PULONG)done);
|
||||
HRESULT hr = g_ExtData->ReadVirtual(address, (PVOID)buffer, request, (PULONG)done);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
ExtDbgOut("DataTarget::ReadVirtual FAILED %08x address %p size %08x\n", hr, address, request);
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE
|
||||
|
|
|
@ -27,8 +27,6 @@ OnUnloadTask *OnUnloadTask::s_pUnloadTaskList = NULL;
|
|||
// Valid for the lifetime of the debug session.
|
||||
//
|
||||
|
||||
DWORD_PTR g_filterHint = 0;
|
||||
|
||||
PDEBUG_CLIENT g_ExtClient;
|
||||
PDEBUG_DATA_SPACES2 g_ExtData2;
|
||||
PDEBUG_ADVANCED g_ExtAdvanced;
|
||||
|
|
|
@ -166,10 +166,6 @@ ArchQuery(void);
|
|||
void
|
||||
ExtRelease(void);
|
||||
|
||||
#ifdef _DEBUG
|
||||
extern DWORD_PTR g_filterHint;
|
||||
#endif
|
||||
|
||||
extern BOOL ControlC;
|
||||
|
||||
inline BOOL IsInterrupt()
|
||||
|
|
|
@ -242,6 +242,7 @@ static HRESULT GetCoreClrDirectory(std::string& coreClrDirectory)
|
|||
}
|
||||
if (!GetAbsolutePath(directory, coreClrDirectory))
|
||||
{
|
||||
ExtDbgOut("Error: Runtime directory %s doesn't exist\n", directory);
|
||||
return E_FAIL;
|
||||
}
|
||||
#else
|
||||
|
@ -261,7 +262,9 @@ static HRESULT GetCoreClrDirectory(std::string& coreClrDirectory)
|
|||
}
|
||||
if (GetFileAttributesA(szModuleName) == INVALID_FILE_ATTRIBUTES)
|
||||
{
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
Status = HRESULT_FROM_WIN32(GetLastError());
|
||||
ExtDbgOut("Error: Runtime module %s doesn't exist %08x\n", szModuleName, Status);
|
||||
return Status;
|
||||
}
|
||||
coreClrDirectory = szModuleName;
|
||||
|
||||
|
@ -269,6 +272,7 @@ static HRESULT GetCoreClrDirectory(std::string& coreClrDirectory)
|
|||
size_t lastSlash = coreClrDirectory.rfind(DIRECTORY_SEPARATOR_CHAR_A);
|
||||
if (lastSlash == std::string::npos)
|
||||
{
|
||||
ExtDbgOut("Error: Runtime module %s has no directory separator\n", szModuleName);
|
||||
return E_FAIL;
|
||||
}
|
||||
coreClrDirectory.assign(coreClrDirectory, 0, lastSlash);
|
||||
|
@ -648,6 +652,7 @@ HRESULT InitializeHosting()
|
|||
HRESULT Status = GetHostRuntime(coreClrPath, hostRuntimeDirectory);
|
||||
if (FAILED(Status))
|
||||
{
|
||||
ExtDbgOut("Error: Failed to get host runtime directory\n");
|
||||
return Status;
|
||||
}
|
||||
#ifdef FEATURE_PAL
|
||||
|
@ -1112,6 +1117,9 @@ HRESULT SymbolReader::LoadSymbolsForWindowsPDB(___in IMetaDataImport* pMD, ___in
|
|||
if (m_pSymReader != NULL)
|
||||
return S_OK;
|
||||
|
||||
if (pMD == nullptr)
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (g_pSymBinder == nullptr)
|
||||
{
|
||||
// Ignore errors to be able to run under a managed host (dotnet-dump).
|
||||
|
|
|
@ -182,10 +182,9 @@ EXPORTS
|
|||
DumpPermissionSet
|
||||
dps=DumpPermissionSet
|
||||
dumppermissionset=DumpPermissionSet
|
||||
dbgout
|
||||
filthint
|
||||
#endif
|
||||
|
||||
dbgout
|
||||
_EFN_GetManagedExcepStack
|
||||
_EFN_GetManagedExcepStackW
|
||||
_EFN_GetManagedObjectFieldInfo
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
bpmd
|
||||
ClrStack
|
||||
dbgout
|
||||
DumpArray
|
||||
DumpAssembly
|
||||
DumpAsync
|
||||
|
|
|
@ -7260,7 +7260,7 @@ public:
|
|||
IfFailRet(g_sos->GetModule(mod, &pModule));
|
||||
|
||||
ToRelease<IMetaDataImport> pMDImport = NULL;
|
||||
IfFailRet(pModule->QueryInterface(IID_IMetaDataImport, (LPVOID *) &pMDImport));
|
||||
pModule->QueryInterface(IID_IMetaDataImport, (LPVOID *) &pMDImport);
|
||||
|
||||
IfFailRet(pSymbolReader->LoadSymbols(pMDImport, pModule));
|
||||
|
||||
|
@ -14383,7 +14383,8 @@ end:
|
|||
return Status;
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
#endif // FEATURE_PAL
|
||||
|
||||
DECLARE_API(dbgout)
|
||||
{
|
||||
INIT_API();
|
||||
|
@ -14401,41 +14402,9 @@ DECLARE_API(dbgout)
|
|||
}
|
||||
|
||||
Output::SetDebugOutputEnabled(!bOff);
|
||||
ExtOut("Debug output logging %s\n", Output::IsDebugOutputEnabled() ? "enabled" : "disabled");
|
||||
return Status;
|
||||
}
|
||||
DECLARE_API(filthint)
|
||||
{
|
||||
INIT_API();
|
||||
|
||||
BOOL bOff = FALSE;
|
||||
DWORD_PTR filter = 0;
|
||||
|
||||
CMDOption option[] =
|
||||
{ // name, vptr, type, hasValue
|
||||
{"-off", &bOff, COBOOL, FALSE},
|
||||
};
|
||||
CMDValue arg[] =
|
||||
{ // vptr, type
|
||||
{&filter, COHEX}
|
||||
};
|
||||
size_t nArg;
|
||||
if (!GetCMDOption(args, option, _countof(option),
|
||||
arg, _countof(arg), &nArg))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
if (bOff)
|
||||
{
|
||||
g_filterHint = 0;
|
||||
return Status;
|
||||
}
|
||||
|
||||
g_filterHint = filter;
|
||||
return Status;
|
||||
}
|
||||
#endif // _DEBUG
|
||||
|
||||
#endif // FEATURE_PAL
|
||||
|
||||
static HRESULT DumpMDInfoBuffer(DWORD_PTR dwStartAddr, DWORD Flags, ULONG64 Esp,
|
||||
ULONG64 IPAddr, StringOutput& so)
|
||||
|
@ -15909,6 +15878,10 @@ DECLARE_API(SetSymbolServer)
|
|||
{
|
||||
ExtOut("Added Windows symbol path: %s\n", windowsSymbolPath.data);
|
||||
}
|
||||
if (logging)
|
||||
{
|
||||
ExtOut("Symbol download logging enabled\n");
|
||||
}
|
||||
}
|
||||
else if (loadNative)
|
||||
{
|
||||
|
|
|
@ -3465,7 +3465,7 @@ void StringObjectContent(size_t obj, BOOL fLiteral, const int length)
|
|||
DWORD_PTR dwAddr = (DWORD_PTR)pwszBuf.GetPtr();
|
||||
if (g_sos->GetObjectStringData(TO_CDADDR(obj), stInfo.m_StringLength+1, pwszBuf, NULL)!=S_OK)
|
||||
{
|
||||
ExtOut("Error getting string data\n");
|
||||
ExtOut("<Invalid Object>");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5112,10 +5112,8 @@ void ExtErr(PCSTR Format, ...)
|
|||
va_end(Args);
|
||||
}
|
||||
|
||||
|
||||
void ExtDbgOut(PCSTR Format, ...)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
if (Output::g_bDbgOutput)
|
||||
{
|
||||
va_list Args;
|
||||
|
@ -5125,7 +5123,6 @@ void ExtDbgOut(PCSTR Format, ...)
|
|||
OutputVaList(DEBUG_OUTPUT_NORMAL, Format, Args);
|
||||
va_end(Args);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
const char * const DMLFormats[] =
|
||||
|
@ -5487,7 +5484,7 @@ GetLineByOffset(
|
|||
IfFailRet(ConvertNativeToIlOffset(offset, &pModule, &methodToken, &methodOffs));
|
||||
|
||||
ToRelease<IMetaDataImport> pMDImport(NULL);
|
||||
IfFailRet(pModule->QueryInterface(IID_IMetaDataImport, (LPVOID *) &pMDImport));
|
||||
pModule->QueryInterface(IID_IMetaDataImport, (LPVOID *) &pMDImport);
|
||||
|
||||
SymbolReader symbolReader;
|
||||
IfFailRet(symbolReader.LoadSymbols(pMDImport, pModule));
|
||||
|
|
|
@ -18,9 +18,6 @@
|
|||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="CMakeLists.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="gcdump.cpp" />
|
||||
<ClCompile Include="gcdumpnonx86.cpp" />
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Text Include="CMakeLists.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="i386">
|
||||
<UniqueIdentifier>{f850f02d-2875-417b-a6cc-6058817844a0}</UniqueIdentifier>
|
||||
|
|
|
@ -2,9 +2,6 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
|
||||
<NoWarn>;1591;1701</NoWarn>
|
||||
<TargetFrameworks>netcoreapp1.1;netcoreapp2.1;netcoreapp3.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -134,6 +134,7 @@ sosCommandInitialize(lldb::SBDebugger debugger)
|
|||
interpreter.AddCommand("clrstack", new sosCommand("ClrStack"), "Provides a stack trace of managed code only.");
|
||||
interpreter.AddCommand("clrthreads", new sosCommand("Threads"), "List the managed threads running.");
|
||||
interpreter.AddCommand("clru", new sosCommand("u"), "Displays an annotated disassembly of a managed method.");
|
||||
interpreter.AddCommand("dbgout", new sosCommand("dbgout"), "Enable/disable (-off) internal SOS logging.");
|
||||
interpreter.AddCommand("dumparray", new sosCommand("DumpArray"), "Displays details about a managed array.");
|
||||
interpreter.AddCommand("dumpasync", new sosCommand("DumpAsync"), "Displays info about async state machines on the garbage-collected heap.");
|
||||
interpreter.AddCommand("dumpassembly", new sosCommand("DumpAssembly"), "Displays details about an assembly.");
|
||||
|
|
|
@ -14,6 +14,7 @@ namespace Microsoft.Diagnostics.Tools.Dump
|
|||
{
|
||||
[Command(Name = "clrstack", AliasExpansion = "ClrStack", Help = "Provides a stack trace of managed code only.")]
|
||||
[Command(Name = "clrthreads", AliasExpansion = "Threads", Help = "List the managed threads running.")]
|
||||
[Command(Name = "dbgout", AliasExpansion = "dbgout", Help = "Enable/disable (-off) internal SOS logging.")]
|
||||
[Command(Name = "dumparray", AliasExpansion = "DumpArray", Help = "Displays details about a managed array.")]
|
||||
[Command(Name = "dumpasync", AliasExpansion = "DumpAsync", Help = "Displays info about async state machines on the garbage-collected heap.")]
|
||||
[Command(Name = "dumpassembly", AliasExpansion = "DumpAssembly", Help = "Displays details about an assembly.")]
|
||||
|
|
Загрузка…
Ссылка в новой задаче