Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A kód hibakeresése egyszerűbb, ha a kód NINCS optimalizálva. Ha a kód optimalizálva van, a fordító és a futtatókörnyezet módosítja a kibocsátott CPU-kódot, hogy gyorsabban fusson, de kevésbé közvetlen leképezéssel rendelkezik az eredeti forráskódhoz. Ha a leképezés kevésbé közvetlen, a hibakeresők gyakran nem tudják megmondani a helyi változók értékét, és előfordulhat, hogy a kódlépések és töréspontok nem a várt módon működnek.
Megjegyzés:
A JIT (Just-In-Time) hibakeresésével kapcsolatos további információkért lásd : Hibakeresés a Just-In-Time Hibakereső használatával a Visual Studióban.
Az optimalizálás működése a .NET-ben
A kiadás buildkonfigurációja általában optimalizált kódot hoz létre, és a hibakeresési buildkonfiguráció nem. Az Optimize MSBuild tulajdonság szabályozza, hogy a fordítónak a kód optimalizálására van-e utasítva.
A .NET-ökoszisztémában a kód forrásról processzorutasításra vált egy kétlépéses folyamat során: először a C# fordítója konvertálja a beírt szöveget egy MSIL nevű köztes bináris űrlapra, és az MSIL-t .dll fájlokká alakítja. Később a .NET-futtatókörnyezet ezt az MSIL-t cpu-utasításokká alakítja. Mindkét lépés bizonyos mértékben optimalizálható, de a .NET-futtatókörnyezet második lépése a jelentősebb optimalizálásokat hajtja végre.
A "JIT-optimalizálás letiltása modulbetöltés esetén (csak felügyelt)" lehetőség
A hibakereső egy olyan lehetőséget tesz elérhetővé, amely szabályozza, hogy mi történik, ha egy optimalizálással lefordított DLL betöltődik a célfolyamaton belül. Ha ez a beállítás nincs bejelölve (az alapértelmezett állapot), akkor amikor a .NET-futtatókörnyezet lefordítja az MSIL-kódot a CPU-kódba, az optimalizálás engedélyezve marad. Ha a beállítás be van jelölve, akkor a hibakereső azt kéri, hogy tiltsa le az optimalizálásokat.
A JIT-optimalizálás letiltása modulbetöltéskor (csak felügyelt) az Eszközök>beállításaipanelEn, az Összes beállítás>általános>hibakeresési szakaszában konfigurálható:
A JIT-optimalizálás letiltása modulbetöltéskor (csak felügyelt) az Eszközök>beállításai párbeszédpanel általános>hibakeresési szakaszában konfigurálható:
Mikor érdemes ellenőrizni a "JIT-optimalizálás mellőzése" lehetőséget?
Akkor jelölje be ezt a lehetőséget, ha a DLL-eket egy másik forrásból, például egy NuGet-csomagból töltötte le, és hibakeresést szeretne végezni ebben a DLL-ben. Ahhoz, hogy a letiltás működjön, meg kell keresnie a DLL szimbólumfájlját (.pdb).
Ha csak a helyileg létrehozott kód hibakeresése érdekli, érdemes bejelöletlenül hagyni ezt a beállítást, mivel bizonyos esetekben a beállítás engedélyezése jelentősen lassítja a hibakeresést. A lassulásnak két oka van:
- Az optimalizált kód gyorsabban fut. Ha sok kód esetében kikapcsolja az optimalizálást, a teljesítményre gyakorolt hatás összeadódhat és jelentősé válhat.
- Ha engedélyezve van a Just My Code, a hibakereső még az optimalizált DLL-ek szimbólumait sem próbálja betölteni. A szimbólumok keresése hosszú időt vehet igénybe.
A JIT-optimalizálás mellőzése lehetőség korlátozásai
A beállítás engedélyezésének két forgatókönyve nem működik:
- Ha a hibakeresőt egy már futó folyamathoz csatolja, ez a beállítás nincs hatással a hibakereső csatlakoztatásakor már betöltött modulokra.
Ez a beállítás nincs hatással a natív kódra előre lefordított (vagy ngen'ed) DLL-ekre. Az előre összeállított kód használatát azonban letilthatja úgy, hogy elindítja a folyamatot a "COMPlus_ReadyToRun" környezeti változó 0 értékre állításával. Ez a megközelítés arra utasítja a .NET Core-futtatókörnyezetet, hogy tiltsa le az előre összeállított rendszerképek használatát, ami kényszeríti a futtatókörnyezetet a JIT fordítási keretrendszer kódjára.
Ha a .NET-keretrendszert célozza, adja hozzá a "COMPlus_ZapDisable" környezeti változót, és állítsa az "1" értékre.
Állítsa be "COMPlus_ReadyToRun": "0", hozzáadva a Properties\launchSettings.json fájlban minden profilhoz:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59694/",
"sslPort": 44320
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"COMPlus_ReadyToRun": "0"
}
},
"HttpLoggingSample": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"COMPlus_ReadyToRun": "0"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}