[dotnet] Make the linker always process debug symbols, and remove debugging support if we're building a release build. (#9594)
Unfortunately due to when things happen in the .NET build logic, we need to define the DebuggerSupport property (which determines whether the app should include debugging support or not) before importing the .NET build files. Since we want to use the _BundlerDebug property (a.k.a. MtouchDebug/MmpDebug) to determine if the app should include debugging support, we must figure out the value of the _BundlerDebug property before we can define the DebuggerSupport property. This turned out complicated, because we're currently defining _BundlerDebug in our old-style MSBuild logic, which is imported after we import the .NET build logic. The end result is that we can either shuffle around a lot of MSBuild code, or copy a few lines to set the _BundlerDebug property. Neither option makes me very happy, but copying a few lines of code seemed the better option, so that's what I did. Fixes these linkall test failures in Release mode: LinkAll.Attributes.AttributeTest [FAIL] DebugAssemblyAttributes : DebuggableAttribute Expected: False But was: True at LinkAll.Attributes.AttributeTest.DebugAssemblyAttributes() [FAIL] DebugConstructorAttributes : No debug attribute in release mode Expected: 0 But was: 2 at LinkAll.Attributes.AttributeTest.DebugConstructorAttributes() [FAIL] DebugPropertyAttributes : DebuggerBrowsable Expected: False But was: True at LinkAll.Attributes.AttributeTest.DebugPropertyAttributes() [FAIL] DebugTypeAttributes : no debug attribute in release mode Expected: 0 But was: 5 at LinkAll.Attributes.AttributeTest.DebugTypeAttributes() [FAIL] DebuggerTypeProxy_24203 : proxy Expected: null But was: <System.Collections.Generic.IDictionaryDebugView`2[K,V]> at LinkAll.Attributes.AttributeTest.DebuggerTypeProxy_24203()
This commit is contained in:
Родитель
d9822057ab
Коммит
f0f47b6a46
|
@ -79,6 +79,20 @@
|
|||
<_PlatformAssemblyName Condition=" '$(_PlatformName)' == 'tvOS' ">Xamarin.TVOS</_PlatformAssemblyName>
|
||||
<_PlatformAssemblyName Condition=" '$(_PlatformName)' == 'watchOS' ">Xamarin.WatchOS</_PlatformAssemblyName>
|
||||
<_PlatformAssemblyName Condition=" '$(_PlatformName)' == 'macOS' ">Xamarin.Mac</_PlatformAssemblyName>
|
||||
|
||||
<!-- We have to set DebuggerSupport before importing Microsoft.NET.Sdk -->
|
||||
<!-- That means we have to set _BundlerDebug before that, because DebuggerSupport depends on it -->
|
||||
<!-- Xamarin.Mac: use MmpDebug (this differs from the old-style logic, which checks $(DebugSymbols) as well) -->
|
||||
<_BundlerDebug Condition="'$(_BundlerDebug)' == '' And '$(_PlatformName)' == 'macOS'">$(MmpDebug)</_BundlerDebug>
|
||||
<!-- Xamarin.iOS: Use MtouchDebug -->
|
||||
<_BundlerDebug Condition="'$(_BundlerDebug)' == '' And '$(_PlatformName)' != 'macOS'">$(MtouchDebug)</_BundlerDebug>
|
||||
<!-- Otherwise the default is true if we're building a Debug configuration -->
|
||||
<_BundlerDebug Condition="'$(_BundlerDebug)' == '' And '$(Configuration)' == 'Debug'">true</_BundlerDebug>
|
||||
<!-- As a last resort, the default is false for all platforms -->
|
||||
<_BundlerDebug Condition="'$(_BundlerDebug)' == ''">false</_BundlerDebug>
|
||||
|
||||
<!-- On the other hand, we want the linker to link away debug support in the actual code unless we're building for Debug -->
|
||||
<DebuggerSupport Condition="'$(DebuggerSupport)' == ''">$(_BundlerDebug)</DebuggerSupport>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Sdk="Microsoft.NET.Sdk" Project="Sdk.targets" />
|
||||
|
@ -183,6 +197,9 @@
|
|||
this yet (ref: https://github.com/dotnet/sdk/pull/12144).
|
||||
-->
|
||||
<_ExtraTrimmerArgs>$(_ExtraTrimmerArgs) -b</_ExtraTrimmerArgs>
|
||||
|
||||
<!-- We always want the linker to process debug symbols, even when building in Release mode, because the AOT compiler uses the managed debug symbols to output DWARF debugging symbols -->
|
||||
<TrimmerRemoveSymbols Condition="'$(TrimmerRemoveSymbols)' == ''">false</TrimmerRemoveSymbols>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -140,10 +140,10 @@ Copyright (C) 2020 Microsoft. All rights reserved.
|
|||
|
||||
<!-- Debug -->
|
||||
<!-- Xamarin.Mac: use MmpDebug, but if that isn't set, use DebugSymbols -->
|
||||
<_BundlerDebug Condition="'$(_PlatformName)' == 'macOS'">$(MmpDebug)</_BundlerDebug>
|
||||
<_BundlerDebug Condition="'$(_PlatformName)' == 'macOS' And '$(_BundlerDebug)' == ''">$(DebugSymbols)</_BundlerDebug>
|
||||
<_BundlerDebug Condition="'$(_BundlerDebug)' == '' And '$(_PlatformName)' == 'macOS'">$(MmpDebug)</_BundlerDebug>
|
||||
<_BundlerDebug Condition="'$(_BundlerDebug)' == '' And '$(_PlatformName)' == 'macOS'">$(DebugSymbols)</_BundlerDebug>
|
||||
<!-- Xamarin.iOS: Use MtouchDebug -->
|
||||
<_BundlerDebug Condition="'$(_PlatformName)' != 'macOS'">$(MtouchDebug)</_BundlerDebug>
|
||||
<_BundlerDebug Condition="'$(_BundlerDebug)' == '' And '$(_PlatformName)' != 'macOS'">$(MtouchDebug)</_BundlerDebug>
|
||||
<!-- Otherwise the default is true if we're building a Debug configuration -->
|
||||
<_BundlerDebug Condition="'$(_BundlerDebug)' == '' And '$(Configuration)' == 'Debug'">true</_BundlerDebug>
|
||||
<!-- As a last resort, the default is false for all platforms -->
|
||||
|
|
Загрузка…
Ссылка в новой задаче