Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A .NET-alkalmazások hibakeresésekor előfordulhat, hogy meg szeretné tekinteni a nem használt forráskódot. Például egy kivétel feltörése vagy a hívásverem használata a forráshelyre való navigáláshoz.
Jegyzet
- A forráskód létrehozása (decompilation) csak .NET-alkalmazásokhoz érhető el, és a nyílt forráskódú ILSpy projekten alapul.
- A felbontás csak a Visual Studio 2019 16.5-ös és újabb verzióiban érhető el.
- A SuppressIldasmAttribute attribútum szerelvényre vagy modulra való alkalmazása megakadályozza, hogy a Visual Studio megkísérelje a felbontást. Bár az attribútum elavult a .NET 6-os és újabb verzióiban, a Visual Studio tiszteletben tartja az attribútumot.
Forráskód létrehozása
Ha hibakeresést végzett, és nem érhető el forráskód, a Visual Studio megjeleníti a Forrás nem található dokumentumot, vagy ha nem rendelkezik szimbólumokkal a szerelvényhez, a Nincs szimbólum betöltve dokumentumot. Mindkét dokumentum rendelkezik egy forráskód dekompilálási opcióval, amely C# kódot hoz létre az aktuális helyhez. A létrehozott C#-kód ezután ugyanúgy használható, mint bármely más forráskód. Megtekintheti a kódot, megvizsgálhatja a változókat, töréspontokat állíthat be stb.
Nincsenek betöltött szimbólumok
Az alábbi ábrán a Nincs szimbólum betöltve üzenet látható.
A forrás nem található
Az alábbi ábrán a Forrás nem található üzenet látható.
Automatikusan visszafejtett kód
A Visual Studio Debugger a Visual Studio 2022 17.7-es verziójától kezdve támogatja a külső .NET-kód automatikus lefordítását. A külső kódba való bejelentkezéskor vagy a Hívásverem ablak használatakor automatikusan megadhatja azokat.
Ha külsőleg implementált kódba lép, a hibakereső automatikusan lebontja azt, és megjeleníti az aktuális végrehajtási pontot. Ha külső kódba szeretne lépni, tiltsa le Csak saját kód.
A Hívásverem ablakból a Just My Code letiltása nélkül bonthatja le a kódot.
Automatikus dekompilálás a Hívásverem ablakában:
Miközben a Hívásverem ablakban hibakeresést végzett, válassza a Külső kód megjelenítéselehetőséget.
A Hívásverem ablakban kattintson duplán bármelyik veremkeretre. A hibakereső lebontja a kódot, majd közvetlenül az aktuális végrehajtási pontra navigál.
Az összes lefordított kód a Megoldáskezelő Külső források csomópontja alatt is megjelenik, így szükség esetén egyszerűen tallózhat a külső fájlok között.
Hibakeresést végezhet a bontott kódban, és töréspontokat állíthat be.
A külső kód automatikus felbontásának letiltása:
Nyissa meg az Eszközök>beállításai panelt, és bontsa ki a Minden beállítás>hibakeresése általános szakaszt>.
A jobb oldali panelen törölje a jelölést az Automatikusan a forráshoz való visszafejtés (csak felügyelt) jelölőnégyzetből.
Nyissa meg az Eszközök>beállításai párbeszédpanelt, és bontsa ki azÁltalános>.
A jobb oldali panelen törölje a jelölést az Automatikusan a forráshoz való visszafejtés (csak felügyelt) jelölőnégyzetből.
Kattintson az OK gombra.
Források létrehozása és beágyazása egy szerelvényhez
Amellett, hogy forráskódot hoz létre egy adott helyhez, létrehozhatja egy adott .NET-szerelvény összes forráskódját. Ehhez nyissa meg a Modulok ablakot, majd a .NET-szerelvény helyi menüjét, majd válassza a Decompile Source to Symbol File parancsot. A Visual Studio létrehoz egy szimbólumfájlt a szerelvényhez, majd beágyazza a forrást a szimbólumfájlba. Egy későbbi lépésben kinyerheti a beágyazott forráskódot.
A beágyazott forráskód kinyerése és megtekintése
A Modulok ablak helyi menüjének Forráskód kinyerése parancsával kinyerheti a szimbólumfájlba beágyazott forrásfájlokat.
A kicsomagolt forrásfájlok hozzáadódnak a megoldásban egyéb fájlokként. A Különböző fájlok funkció alapértelmezés szerint ki van kapcsolva a Visual Studióban. Ha a funkció nincs engedélyezve, nem nyitható meg a kinyert forráskód.
A funkciót az Eszközök>beállításai menüben engedélyezheti.
Nyissa meg az Eszközök>beállításai panelt, és bontsa ki az Összes beállítás>környezeti>dokumentuma szakaszt .
A jobb oldali panelen jelölje be a Különböző fájlok megjelenítése jelölőnégyzetet, vagy törölje a jelölését a Megoldáskezelőben .
Ha ezt a lehetőséget választja, megadhatja a Különböző fájlok projektben mentett elemek számát.
A módosítások alkalmazásához indítsa újra a Visual Studiót.
Nyissa meg az Eszközök>beállításai párbeszédpanelt, és bontsa ki a Környezeti>dokumentumok szakaszt .
A jobb oldali panelen jelölje be a Különböző fájlok megjelenítése jelölőnégyzetet, vagy törölje a jelölését a Megoldáskezelőben .
Ha ezt a lehetőséget választja, megadhatja a Különböző fájlok projektben mentett elemek számát.
Kattintson az OK gombra.
A kinyert forrásfájlok a Megoldáskezelőkülönböző fájljaiban jelennek meg.
SourceLink
A .NET-kódtárak vagy a SourceLinkhez engedélyezett NuGet-csomagok esetében a forráskódba lépve töréspontokat állíthat be, és használhatja a hibakereső összes funkcióját. További információ: Hibakeresés és diagnosztika engedélyezése a Source Link és A hibakeresési idő termelékenységének javítása a SourceLinkhasználatával.
Ismert korlátozások
A felbontás korlátozásai
A .NET-szerelvényekben használt köztes formátumból (IL) származó forráskód létrehozása bizonyos eredendő korlátozásokkal rendelkezik. Így a létrehozott forráskód nem hasonlít az eredeti forráskódra. A legtöbb különbség olyan helyeken van, ahol az eredeti forráskód információira futásidőben nincs szükség. Például futásidőben nincs szükség olyan információkra, mint a szóköz, a megjegyzések és a helyi változók neve. Javasoljuk, hogy a létrehozott forrást használja a program végrehajtásának megértéséhez, és ne az eredeti forráskód pótlásaként.
Optimalizált vagy kiadott összeállítások hibakeresése
Ha olyan kódot dekompilál, amelyet egy fordítóoptimalizálással összeállított assembly-ből generáltak, a következő problémákkal találkozhat:
- Előfordulhat, hogy a töréspontok nem mindig kötődnek a megfelelő forráshelyhez.
- Előfordulhat, hogy nem mindig sikerül a megfelelő helyre lépni.
- Előfordulhat, hogy a helyi változók neve nem pontos.
- Előfordulhat, hogy egyes változók nem érhetők el a kiértékeléshez.
További részletek a következő GitHub-probléma kapcsolatban találhatók: ICSharpCode.Decompiler integrációja a VS Debugger-be.
A felbontás megbízhatósága
A felbontási kísérletek viszonylag kis százaléka okozhat meghibásodást. Ezt a viselkedést az ILSpy szekvenciapont nullhivatkozási hibája okozza. A hibát úgy enyhítettük, hogy elfogtuk ezeket a problémákat, és simán megszakítottuk a dekompilálási kísérletet.
További részletek a következő GitHub-probléma kapcsolatban találhatók: ICSharpCode.Decompiler integrációja a VS Debugger-be.
Korlátozások aszinkron kóddal
Az aszinkron/várakozási kódmintákkal rendelkező modulok felbontásából származó eredmények hiányosak vagy teljes mértékben sikertelenek lehetnek. Az aszinkron/várakozási és hozamállapotú gépek ILSpy-implementációja csak részben van implementálva.
További részletek a GitHub-problémában találhatók: PDB Generator status.
Saját kód
A Just My Code (JMC) beállítás lehetővé teszi a Visual Studio számára, hogy átlépjen a rendszeren, a keretrendszeren, a kódtáron és más nem használaton kívüli hívásokon. A hibakeresési munkamenet során a Modulok ablakban látható, hogy a hibakereső mely kódmodulokat kezeli saját kódként (felhasználói kód).
Az optimalizált vagy kiadási modulok felbontása nem használt kódot eredményez. Ha a hibakereső megáll a visszafejtett, nem felhasználói kódban, például megjelenik a Nincs forrás ablak. Az Eszközök> vagy Hibakeresési> menüben letilthatja a Just My Code funkciót.
Nyissa meg az Eszközök>beállításai panelt, és bontsa ki a Minden beállítás>hibakeresése általános szakaszt>. Törölje a jelet a Csak saját kód engedélyezése jelölőnégyzetből.
Nyissa meg az Eszközök>beállításai párbeszédpanelt, és bontsa ki azÁltalános>. Törölje a jelet a Csak saját kód engedélyezése jelölőnégyzetből.
Kinyert források
A szerelvényből kinyert forráskódra a következő korlátozások vonatkoznak:
- A létrehozott fájlok neve és helye nem konfigurálható.
- A fájlok ideiglenesek, és a Visual Studio törli őket.
- A fájlok egyetlen mappába kerülnek, és az eredeti források által használt mappahierarchiát nem használják.
- Az egyes fájlok fájlneve tartalmazza a fájl ellenőrzőösszeg-kivonatát.
A létrehozott kód csak C# nyelven van
A dekompiláció csak forráskódfájlokat hoz létre a C#-ban. Más nyelven nem lehet fájlokat létrehozni.