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.
Ez a cikk bemutatja, hogyan használhat különböző töréspontokat a Visual Studióban a hibakeresés hatékonyságának javítása érdekében. Különböző forgatókönyveket fed le, amelyekben töréspontok alkalmazhatók, például a kód végrehajtásának szüneteltetése, a naplózási információk és a változóállapotok változásainak nyomon követése. A cikk bemutatja, hogyan állíthat be feltételes töréspontokat, nyomkövetési pontokat, adattörési pontokat, függő töréspontokat és ideiglenes töréspontokat. A függvény töréspontjainak beállítására vonatkozó részletes utasításokat is tartalmaz. Ez az útmutató elengedhetetlen azoknak a fejlesztőknek, akik hatékony hibakereséshez szeretnének töréspontokat használni a Visual Studio-ban.
Ha nem ismeri a Töréspontok használatát a Visual Studióban, a cikk megismerése előtt olvassa el A töréspontok használatának első lépései című témakört.
A dokumentációval kapcsolatos legjobb élmény érdekében válassza ki az előnyben részesített fejlesztési nyelvet vagy futtatókörnyezetet a cikk tetején található listából.
Forgatókönyvek
Az alábbi táblázat a töréspontok gyakori hibakeresési forgatókönyveit és a forgatókönyvhöz javasolt törésponttípust mutatja be.
Forgatókönyv | Leírás |
---|---|
Hogyan szüneteltethetem a kód futtatását egy olyan kódsor vizsgálatához, amely hibát tartalmazhat? | Állítson be egy töréspontot. További információ: A töréspontok használatának első lépései. |
A változó nem várt értékkel rendelkezik? Vagy meg szeretném vizsgálni az alkalmazást, amikor egy adott állapotba ér? | Próbálja ki a feltételes töréspontot annak szabályozásához, hogy hol és mikor aktiválódik egy töréspont feltételes logika használatával. Feltételek hozzáadásához kattintson a jobb gombbal egy töréspontra. Állítsa a feltételt igaz értékre, ha a változó egyenlő a váratlan értékkel. További információ: töréspont-feltételek. |
Hogyan naplózhatom az adatokat a Kimeneti ablakba konfigurálható feltételek mellett a kód módosítása vagy leállítása nélkül? | A nyomkövetési pontok lehetővé teszik, hogy konfigurálható feltételek mellett naplózza az adatokat a Kimeneti ablakban a kód módosítása vagy leállítása nélkül. További információ: Nyomkövetési pontok használata a Visual Studio hibakeresőjében. |
Honnan tudhatom, hogy mikor változik a változóm értéke? | C++ esetén állítson be egy adattörési pontot. A .NET Core 3-at és újabb verziót használó alkalmazások esetében adattörési pontot is beállíthat. Ellenkező esetben csak C# és F# esetén egy objektumazonosítót feltételes törésponttalnyomon követni. |
Hogyan szakíthatom meg a végrehajtást, ha egy másik töréspontot ér el? | Állítson be egy függő töréspontot, amely csak akkor szakítja meg a végrehajtást, ha először egy másik töréspont kerül aktiválásra. További információ: Függő töréspont. |
Csak egyszer érhetek el töréspontot? | Állítson be egy ideiglenes töréspontot, amely lehetővé teszi, hogy csak egyszer törje meg a kódot. További információ: Ideiglenes töréspont. |
Szüneteltethetem a kódot egy cikluson belül egy bizonyos iterációban? | Állítson be egy függő töréspontot, amely csak akkor szakítja meg a végrehajtást, ha először egy másik töréspontot talál. További információ: Találatok száma. |
Szüneteltethetem a kódot egy függvény elején, ha tudom a függvény nevét, de nem a helyét? | Ezt egy függvénytörési ponttal teheti meg. További információ: Függvénytöréspontok beállítása. |
Szüneteltethetem a kódot több azonos nevű függvény elején? | Ha több azonos nevű függvénye van (túlterhelt függvények vagy függvények különböző projektekben), használhat függvény töréspontot. |
Töréspontműveletek és nyomkövetési pontok
A tracepoint egy töréspont, amely egy üzenetet nyomtat ki a Kimeneti ablakba. A nyomkövetési pontok ideiglenes nyomkövetési utasításként működhetnek a programozási nyelven, és nem szüneteltetik a kód végrehajtását. Egy nyomkövetési pontot úgy hozhat létre, hogy beállít egy speciális műveletet a Töréspont beállításai ablakban. Részletes útmutatásért lásd: Nyomkövetési pontok használata a Visual Studio hibakeresőjében.
Töréspont feltételei
Feltételek beállításával szabályozhatja, hogy mikor és hol hajtson végre egy töréspontot. A feltétel bármely érvényes kifejezés lehet, amelyet a hibakereső felismer. (Az érvényes kifejezésekről további információt a hibakereső kifejezések című témakörben talál.)
Töréspont-feltétel beállítása:
Kattintson a jobb gombbal a töréspont szimbólumára, és válassza a Feltételek (vagy nyomja le Alt + F9, C). Vagy mutasson a töréspont szimbólumára, válassza a Beállítások ikont, majd válassza a Feltételek lehetőséget a Töréspont beállításai ablakban.
A jobb gombbal a kódsor melletti bal szélső margóra is kattinthat, és új feltételes töréspont beállításához válassza Feltételes töréspont beszúrása lehetőséget a helyi menüből.
A Töréspontok ablakban is beállíthat feltételeket úgy, hogy a jobb gombbal a töréspontra kattint, majd a Beállításoklehetőséget választja, majd a Feltételek
A legördülő listában válassza Feltételes kifejezés, Találatok számavagy Szűrőlehetőséget, és ennek megfelelően állítsa be az értéket.
Válassza a bezárása lehetőséget, vagy nyomja le a Ctrl+Enter billentyűkombinációt a Töréspont beállításai ablak bezárásához. Vagy a Töréspontok ablakban válassza az OK lehetőséget a párbeszédpanel bezárásához.
A feltételekkel rendelkező töréspontok + szimbólummal jelennek meg a forráskódban, és töréspontok ablakokban.
Feltételes kifejezés létrehozása
A feltételes kifejezés kiválasztásakor két feltétel közül választhat: Igaz vagy módosításakor. Válassza a Igaz lehetőséget, ha meg akarsz szakítani, amikor a kifejezés teljesül, vagy válaszd a Módosítva opciót, hogy megszakítsd, amikor a kifejezés értéke megváltozik.
Az alábbi példában a töréspont csak akkor aktiválódik, ha a testInt
értéke 4.
Az alábbi példában a töréspont csak akkor aktiválódik, ha a testInt
értéke megváltozik.
Ha érvénytelen szintaxisú töréspont-feltételt állít be, figyelmeztető üzenet jelenik meg. Ha érvényes szintaxissal, de érvénytelen szemantikával rendelkező töréspont-feltételt ad meg, a töréspont első találatakor figyelmeztető üzenet jelenik meg. A hibakereső mindkét esetben megáll, amikor eléri az érvénytelen töréspontot. A töréspont csak akkor lesz kihagyva, ha a feltétel érvényes, és false
lesz kiértékelve.
Jegyzet
A mező módosításakor a hibakereső nem tekinti változásnak a feltétel első kiértékelését, ezért nem éri el az első értékelés töréspontját.
Objektumazonosítók használata feltételes kifejezésekben (csak C# és F# esetén)
Vannak esetek, amikor egy adott objektum viselkedését szeretné megfigyelni. Előfordulhat például, hogy szeretné megtudni, hogy miért szúrtak be egy objektumot többször egy gyűjteménybe. A C#-ban és az F#-ban objektumazonosítókat hozhat létre referenciatípusok adott példányaihoz, és töréspont-körülmények között használhatja őket. Az objektumazonosítót a közös nyelvi futtatókörnyezet (CLR) hibakeresési szolgáltatásai hozzák létre, és az objektumhoz társítják.
Objektumazonosító létrehozása:
Állítson be egy töréspontot a kódban az objektum létrehozása után.
Kezdje el a hibakeresést, és amikor a végrehajtás szünetel a töréspontnál, válassza Hibakeresés>Windows>Helyiek (vagy nyomja le Ctrl + Alt + V, L) billentyűkombinációt a Helyiek ablak megnyitásához.
Keresse meg az adott objektumpéldányt a Helyiek ablakban, kattintson rá a jobb gombbal, és válassza Objektumazonosító létrehozásalehetőséget.
Látnia kell egy $-t és egy számot a Helyiek ablakban. Ez az objektumazonosító.
Adjon hozzá egy új töréspontot a vizsgálandó ponton; például amikor az objektumot hozzá kell adni a gyűjteményhez. Kattintson a jobb gombbal a töréspontra, és válassza a Feltételeklehetőséget.
Használja az objektumazonosítót a Feltételes kifejezés mezőben. Ha például az
item
változó a gyűjteményhez hozzáadni kívánt objektum, válassza ki az Igaz opciót, és írja be: elem == $<n>, ahol <n> az objektum-azonosító szám.A végrehajtás akkor szakad meg, amikor az objektumot hozzá kell adni a gyűjteményhez.
Az objektumazonosító törléséhez kattintson a jobb gombbal a változóra a Helyiek ablakban, és válassza Objektumazonosító törléselehetőséget.
Jegyzet
Az objektumazonosítók gyenge hivatkozásokat hoznak létre, és nem akadályozzák meg az objektumot abban, hogy szemétként kerüljön összegyűjtésre. Ezek csak az aktuális hibakeresési munkamenetre érvényesek.
Találatszám-feltétel beállítása
Ha azt gyanítja, hogy a kód egy ciklusa bizonyos számú iteráció után hibásan működik, beállíthat egy töréspontot, amely leállítja a végrehajtást a találatok száma után, ahelyett, hogy az F5 többször lenyomva kellene elérnie az iterációt.
A Töréspont beállításai ablakban a Feltételek területen válassza a Találatok számalehetőséget, majd adja meg az iterációk számát. Az alábbi példában a töréspont úgy van beállítva, hogy minden második iterációban aktiválódjon.
Szűrőfeltétel beállítása
Korlátozhatja, hogy a töréspont csak a megadott eszközökön, vagy meghatározott folyamatokban és szálakban aktiválódjon.
A Töréspont beállításai ablakban a Feltételek területen válassza a Szűrőlehetőséget, majd adjon meg egy vagy több kifejezést a következő kifejezések közül:
- GépNév = "név"
- ProcessId = érték
- ProcessName = "name"
- ThreadId = érték
- ThreadName = "name"
A sztringértékeket dupla idézőjelek közé zárja. A záradékok kombinálhatók &
(ÉS), ||
(VAGY), !
(NOT) és zárójelek használatával.
Függvénytöréspontok beállítása
A függvény meghívása esetén megszakíthatja a végrehajtást. Ez például akkor hasznos, ha ismeri a függvény nevét, de a helyét nem. Akkor is hasznos, ha azonos nevű függvényekkel rendelkezik, és azok mindegyikén szeretne megszakítást végrehajtani (például túlterhelt függvények vagy különböző projektek függvényei esetén).
Függvény-megszakítási pont beállítása:
Válassza a Hibakeresés>Új töréspont>Függvénytöréspontlehetőséget, vagy nyomja le a Ctrl + K, Bbillentyűkombinációt.
Az Töréspontok ablakban is kiválaszthatja >függvénytörési.
Az Új függvénytörési párbeszédpanelen írja be a függvény nevét a Függvénynév mezőbe.
A függvény specifikációjának szűkítése:
Használja a teljesen meghatározott függvénynevet.
Példa:
Namespace1.ClassX.MethodA()
Adja hozzá egy túlterhelt függvény paramétertípusait.
Példa:
MethodA(int, string)
A modul megadásához használja a "!" szimbólumot.
Példa:
App1.dll!MethodA
Használja a környezet operátort natív C++-ban.
{function, , [module]} [+<line offset from start of method>]
Példa:
{MethodA, , App1.dll}+2
A Nyelv legördülő listában válassza ki a függvény nyelvét.
Válassza OKlehetőséget.
Függvénytörési pont beállítása memóriacím használatával (csak natív C++ használatával)
Egy objektum címével függvénytörési pontot állíthat be egy adott osztály egy adott példánya által hívott metódusra. Ha például egy my_class
típusú címezhető objektumot ad meg, függvénytörési pontot állíthat be a példány által hívott my_method
metóduson.
Állítson be egy töréspontot valahol az osztálypéldány létrehozása után.
Keresse meg a példány címét (például
0xcccccccc
).Válassza a Hibakeresés>Új töréspont>Függvénytöréspontlehetőséget, vagy nyomja le a Ctrl + K, Bbillentyűkombinációt.
Adja hozzá a következőket a Függvénynév mezőbe, és válassza C++ nyelvet.
((my_class *) 0xcccccccc)->my_method
Adattörési pontok beállítása (.NET Core 3.x vagy .NET 5+)
Az adattörési pontok megszakítják a végrehajtást, amikor egy adott objektum tulajdonsága megváltozik.
Adattörési pont beállítása:
.NET Core- vagy .NET 5+ projektben kezdje el a hibakeresést, és várja meg, amíg el nem éri a töréspontot.
Az Automatikus, Figyelésvagy Helyiek ablakban kattintson a jobb gombbal egy tulajdonságra, és válassza a Törés, amikor az érték változik a helyi menüben.
A .NET Core és a .NET 5+ adattörésipontjai nem működnek:
- Az elemleírásban, a Helyi beállításokban, az Automatikus beállításokban vagy a Figyelő ablakban nem bővíthető tulajdonságok
- Statikus változók
- A DebuggerTypeProxy attribútummal rendelkező osztályok
- A szerkezeteken belüli mezők
A maximálisan beállítható számról Adattöréspont hardverkorlátjaicímű témakörben olvashat.
Adattörési pontok beállítása (csak natív C++ esetén)
Az adattörési pontok megszakítják a végrehajtást, amikor egy megadott memóriacímen tárolt érték megváltozik. Ha az érték olvasható, de nem módosul, a végrehajtás nem törik meg.
Adattörési pont beállítása:
Egy C++ projektben kezdje el a hibakeresést, és várja meg, amíg el nem éri a töréspontot. A Hibakeresés menüben válassza Új töréspont>Adattöréspontlehetőséget.
Az Töréspontok ablakban választhatja >adattörési lehetőséget, vagy kattintson a jobb gombbal az Automatikus, a Figyelésvagy Helyiek ablak egyik elemére, és válassza a Törés, amikor az értékváltozások a helyi menüben.
A Cím mezőbe írjon be egy memóriacímet vagy egy memóriacímre kiértékelő kifejezést. Például írja be a
&avar
-t, hogy megállítsa a folyamatot, amikor aavar
változó tartalma megváltozik.A Bájtok száma legördülő listában válassza ki a hibakereső által megtekinteni kívánt bájtok számát. Ha például a 4választja, a hibakereső figyeli a négy bájtot a
&avar
helytől kezdve, és megszakít, ha a bájtok bármelyikének értéke megváltozik.
Az adattörési pontok nem működnek a következő feltételek mellett:
- Az a folyamat, amelyen nem fut hibakeresés, a memóriaterületre ír.
- A memória helye két vagy több folyamat között van megosztva.
- A rendszer a rendszermagon belül frissíti a memória helyét. Ha például a rendszer memóriát ad át a 32 bites Windows
ReadFile
függvénynek, a rendszer kernel módból frissíti a memóriát, így a hibakereső nem szakítja meg a frissítést. - Ahol az órakifejezés 32 bites hardveren 4 bájtnál nagyobb, 64 bites hardveren pedig 8 bájt. Ez az x86-os architektúra korlátozása.
Jegyzet
Az adattörési pontok adott memóriacímtől függenek. Egy változó címe egy hibakeresési munkamenetről a következőre változik, így az adattörési pontok automatikusan le lesznek tiltva az egyes hibakeresési munkamenetek végén.
Ha egy helyi változóhoz állít be adattörési pontot, a töréspont a függvény befejeződésekor engedélyezve marad, de a memóriacím már nem alkalmazható, így a töréspont viselkedése kiszámíthatatlan. Ha egy helyi változóhoz állít be adattörési pontot, a függvény befejeződése előtt törölnie vagy letiltania kell a töréspontot.
Adattörési pont hardverkorlátjai
A Windows kernel és a mögöttes hardver az alábbi korlátozásokkal rendelkezik az adattörési pontok beállításakor. A korlát a beállítható adattörési pontok maximális számát jelenti.
Processzorarchitektúra | Adattörési pontok korlátja |
---|---|
x64 és x86 | 4 |
ARM64 | 2 |
KAR | 1 |
Függő töréspont beállítása
A függő töréspontok csak akkor szakítják meg a végrehajtást, ha először egy másik töréspontot találnak el. Összetett forgatókönyv esetén, mint például a többszálú alkalmazás hibakeresésekor, a további töréspontokat akkor konfigurálhatja, amikor az első töréspont eltalálásra kerül. Ez sokkal egyszerűbbé teheti a kód hibakeresését olyan gyakori elérési utakon, mint a játékhurok vagy a segédprogram API, mivel a függvények töréspontja csak akkor engedélyezhető, ha a függvényt az alkalmazás egy adott részéből hívják meg.
Függő töréspont beállítása:
Húzza az egérmutatót a töréspont szimbólum fölé, válassza a Beállítások ikont, majd a Töréspont beállításai ablakban válassza a Csak akkor engedélyezze, ha a következő töréspont aktiválódik lehetőséget.
A legördülő listában válassza ki azt az előfeltétel-töréspontot, amelytől az aktuális töréspont függ.
Válassza a bezárása lehetőséget, vagy nyomja le a Ctrl+Enter billentyűkombinációt a Töréspont beállításai ablak bezárásához. Vagy a Töréspontok ablakban válassza az OK lehetőséget a párbeszédpanel bezárásához.
A függő töréspont beállításához a jobb gombbal kattintva elérhető helyi menüt is használhatja.
Kattintson a jobb egérgombbal a kód sorának bal szélén lévő margóra, és válassza a Függő töréspont beszúrása lehetőséget a helyi menüből.
- A függő töréspontok nem működnek, ha csak egyetlen töréspont van az alkalmazásban.
- A függő töréspontok normál sortörési ponttá alakulnak, ha az előfeltételként szolgáló töréspontot törölték.
Ideiglenes töréspont beállítása
Ezzel a törésponttal csak egyszer törheti meg a kódot. Hibakereséskor a Visual Studio hibakeresője csak egyszer szünetelteti a futó alkalmazást ehhez a törésponthoz, majd azonnal eltávolítja azt a találat után.
Ideiglenes töréspont beállítása:
Mutasson a töréspont szimbólumára, válassza a Beállítások ikont, majd válassza a Töréspont eltávolítása, amikor eléri a Töréspont beállításai ablakban.
Válassza a bezárása lehetőséget, vagy nyomja le a Ctrl+Enter billentyűkombinációt a Töréspont beállításai ablak bezárásához. Vagy a Töréspontok ablakban válassza az OK lehetőséget a párbeszédpanel bezárásához.
Az ideiglenes töréspont beállításához a jobb gombbal kattintva a helyi menüt is használhatja.
Kattintson a jobb gombbal a kódsor melletti bal szélső margóra, és válassza Ideiglenes töréspont beszúrása lehetőséget a helyi menüből.
Vagy egyszerűen használja az F9 + Shift + Alt, T billentyűparancs ot, és állítsa be az ideiglenes töréspontot a kívánt sorban.