töréspontok használata a Visual Studio hibakeresőben
- 06/30/2020
- 12 perc olvasni
-
- M
- g
- j
- v
- g
-
+8
a töréspontok az egyik legfontosabb hibakeresési technika a fejlesztő eszköztárában. Töréspontokat állít be, ahol szüneteltetni szeretné a hibakereső végrehajtását. Például érdemes megnézni a kódváltozók állapotát, vagy megnézni a hívásköteget egy bizonyos töréspontnál. Ha töréspontok használata közben próbál megoldani egy figyelmeztetést vagy problémát, olvassa el a töréspontok hibaelhárítása A Visual Studio hibakeresőben című témakört.
Megjegyzés
ha ismeri a megoldani kívánt feladatot vagy problémát, de tudnia kell, hogy milyen töréspontot kell használni, olvassa el a GYIK – keresse meg a hibakeresési funkciót.
- töréspontok beállítása a forráskódban
- töréspont műveletek és nyomkövetési pontok
- töréspont feltételek
- feltételes kifejezés létrehozása
- objektumazonosítók használata feltételes kifejezésekben (csak C# és F# esetén)
- találatszám-feltétel beállítása
- szűrőfeltétel beállítása
- állítsa be a függvény töréspontjait
- függvénytöréspont beállítása memóriacím használatával (csak natív C++ esetén)
- állítsa be az adatok töréspontjait (. Net Core 3.0 vagy magasabb)
- adat töréspontok beállítása (csak natív C++ esetén)
- töréspontok kezelése a töréspontok ablakban
- töréspont címkék
- töréspontok exportálása és importálása
- töréspontok beállítása a hibakereső ablakokból
- töréspont beállítása a hívási verem ablakban
- töréspont beállítása a szétszerelési ablakban
- Lásd még:
töréspontok beállítása a forráskódban
a végrehajtható kód bármely sorában beállíthat töréspontot. Például a következő C # kódban beállíthat egy töréspontot a kódsoron a változó hozzárendelésével (int testInt = 1
), a for
hurokkal vagy a for
hurok bármely kódjával. Nem állíthat be töréspontot a metódus-aláírásokra, a névtér vagy osztály deklarációira vagy a változó deklarációira, ha nincs hozzárendelés és nincs getter/szetter.
töréspont beállításához a forráskódban kattintson a bal szélső margóra egy kódsor mellett. Kiválaszthatja a sort is, majd nyomja meg az F9 billentyűt, Válassza a Debug > Toggle Breakpoint lehetőséget, vagy kattintson a jobb gombbal, majd válassza a Breakpoint > breakpoint beszúrása lehetőséget. A töréspont piros pontként jelenik meg a bal margón.
a legtöbb nyelvnél, beleértve a C# – ot is, a töréspont és az aktuális végrehajtási sorok automatikusan kiemelésre kerülnek. C++ kód esetén bekapcsolhatja a töréspont és az aktuális sorok kiemelését az eszközök (vagy hibakeresés) > opciók > hibakeresés > jelölje ki a töréspontok és az aktuális utasítás teljes forrássorát (csak C++ esetén).
hibakereséskor a végrehajtás szünetel a töréspontnál, mielőtt az adott sorban lévő kód végrehajtásra kerülne. A töréspont szimbólum sárga nyilat mutat.
a következő példa töréspontjánál a testInt
értéke még mindig 1. Tehát az érték nem változott a változó inicializálása óta (1 értékre állítva), mert a sárga utasítás még nem került végrehajtásra.
amikor a hibakereső megáll a töréspontnál, megnézheti az alkalmazás aktuális állapotát, beleértve a változó értékeket és a hívásköteget.
Íme néhány általános utasítás a töréspontok kezelésére.
-
a töréspont egy kapcsoló. Kattintson rá, nyomja meg az F9 billentyűt, vagy használja hibakeresés > Toggle töréspont törölni vagy újra beilleszteni.
-
ha törlés nélkül szeretne letiltani egy töréspontot, vigye az egérmutatót az egér fölé vagy kattintson rá a jobb gombbal, majd válassza a töréspont letiltása lehetőséget. A letiltott töréspontok üres pontokként jelennek meg a bal margón vagy a töréspontok ablakban. A töréspont újbóli engedélyezéséhez vigye az egérmutatót vagy kattintson rá a jobb gombbal, majd válassza a töréspont engedélyezése lehetőséget.
-
állítsa be a feltételeket és műveleteket, adjon hozzá és szerkesszen címkéket, vagy exportáljon töréspontot úgy, hogy jobb egérgombbal kattint rá, kiválasztja a megfelelő parancsot, vagy az egérmutatót fölé viszi, és kiválasztja a Beállítások ikont.
töréspont műveletek és nyomkövetési pontok
a nyomkövetési pont egy töréspont, amely üzenetet nyomtat a kimeneti ablakba. A tracepoint úgy működhet, mint egy ideiglenes trace utasítás a programozási nyelvben, és nem szünetelteti a kód végrehajtását. A nyomkövetési pontot úgy hozhatja létre, hogy egy speciális műveletet állít be a töréspont beállításai ablakban. A részletes utasításokat lásd: tracepoints használata a Visual Studio hibakeresőben.
töréspont feltételek
a feltételek beállításával szabályozhatja a töréspont végrehajtásának idejét és helyét. A feltétel bármilyen érvényes kifejezés lehet, amelyet a hibakereső felismer. Az érvényes kifejezésekkel kapcsolatos további információkért lásd: kifejezések a hibakeresőben.
töréspont feltétel beállítása:
-
kattintson a jobb gombbal a töréspont szimbólumra, majd válassza a feltételek lehetőséget (vagy nyomja meg az Alt + F9, C billentyűkombinációt). Vagy vigye az egérmutatót a töréspont szimbólum fölé, 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 töréspontok ablakban úgy is beállíthat feltételeket, hogy jobb gombbal kattint egy töréspontra, kiválasztja a Beállítások, majd a feltételek lehetőséget.
-
a legördülő menüben válassza a feltételes kifejezés, a találatok száma vagy a szűrő lehetőséget, majd állítsa be ennek megfelelően az értéket.
-
válassza a Bezárás lehetőséget, vagy nyomja meg a Ctrl+Enter billentyűt a töréspont-beállítások ablak bezárásához. Vagy a töréspontok ablakban válassza az OK lehetőséget a párbeszédablak bezárásához.
a beállított feltételekkel rendelkező töréspontok + szimbólummal jelennek meg a forráskód és a töréspontok ablakában.
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ódosul. Válassza a true lehetőséget, ha a kifejezés elégedett, vagy ha megváltozik, akkor a break lehetőséget, ha a kifejezés értéke megváltozott.
a következő példában a töréspontot csak akkor éri el, ha a testInt
értéke 4:
a következő példában a töréspont csak akkor jelenik meg, ha a testInt
értéke megváltozik:
ha érvénytelen szintaxisú töréspontot á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. Mindkét esetben a hibakereső megszakad, amikor eléri Az érvénytelen töréspontot. A töréspont csak akkor kerül átugrásra, ha a feltétel érvényes és értéke false
.
Megjegyzés
a When changed mezőben a hibakereső nem tekinti változásnak az állapot első értékelését, így 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. Például érdemes lehet megtudni, hogy egy objektumot miért illesztettek be többször egy gyűjteménybe. A C# és az F# programban objektumazonosítókat hozhat létre a referenciatípusok meghatározott példányaihoz, és használhatja őket töréspont körülmények között. Az objektumazonosítót a common language runtime (CLR) hibakeresési szolgáltatások generálják és társítják az objektumhoz.
objektumazonosító létrehozása:
-
állítson be egy töréspontot a kódban az objektum létrehozása után.
-
indítsa el a hibakeresést, és amikor a végrehajtás szünetel a töréspontnál, válassza a Debug > Windows > Locals lehetőséget (vagy nyomja meg a Ctrl + Alt + V, L billentyűkombinációt) a Locals ablak megnyitásához.
keresse meg az adott objektumpéldányt a helyiek ablakban, kattintson rá a jobb gombbal, majd válassza az objektumazonosító létrehozása lehetőséget.
látnia kell egy $ plusz egy számot a helyiek ablakban. Ez az objektumazonosító.
-
adjon hozzá egy új töréspontot a vizsgálni kívánt ponthoz; például amikor az objektumot hozzá kell adni a gyűjteményhez. Kattintson a jobb gombbal a töréspontra, majd válassza a feltételek lehetőséget.
-
használja az objektumazonosítót a feltételes kifejezés mezőben. Ha például a
item
változó az objektum, amelyet hozzá kell adni a gyűjteményhez, válassza az is true lehetőséget, és írja be az item == $<n> parancsot, ahol a <n> az objektumazonosí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, majd válassza az objektumazonosító törlése lehetőséget.
Megjegyzés:
az objektumazonosítók gyenge hivatkozásokat hoznak létre, és nem akadályozzák meg az objektum szemétgyűjtését. 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ódban lévő hurok egy bizonyos számú iteráció után rosszul kezd viselkedni, beállíthat egy töréspontot a végrehajtás leállításához a találatok száma után, ahelyett, hogy ismételten meg kellene nyomnia az F5 billentyűt az iteráció eléréséhez.
a töréspont beállításai ablakban válassza a találatok száma lehetőséget, majd adja meg az iterációk számát. A következő példában a töréspont úgy van beállítva, hogy minden más iterációnál elérje:
szűrőfeltétel beállítása
a töréspontot csak meghatározott eszközökön, vagy meghatározott folyamatokban és szálakban aktiválhatja.
feltételek a töréspont beállításai ablakban válassza a szűrő lehetőséget, majd írjon be egyet vagy többet a következő kifejezések közül:
- MachineName = ” név “
- ProcessId = érték
- ProcessName = ” név “
- ThreadId = érték
- ThreadName = “név”
csatolja a karakterlánc értékeit dupla idézőjelekbe. A &
(és), ||
(vagy), !
(nem) és zárójelek használatával kombinálhatja a záradékokat.
állítsa be a függvény töréspontjait
megszakíthatja a végrehajtást, amikor egy függvény meghívásra kerül. Ez akkor hasznos, ha például ismeri a függvény nevét, de nem a helyét. Ez akkor is hasznos, ha azonos nevű funkciók vannak, és mindegyiket meg akarja szakítani (például túlterhelt funkciók vagy különböző projektek funkciói).
függvény töréspont beállítása:
-
válassza a hibakeresés > új töréspont > funkció töréspont lehetőséget, vagy nyomja meg a Ctrl + K, B billentyűkombinációt.
az új > funkció töréspontját a töréspontok ablakban is kiválaszthatja.
-
az új funkció töréspont párbeszédpanelen írja be a függvény nevét a funkció neve mezőbe.
a funkció specifikációjának szűkítése:
-
használja a teljesen minősített funkció nevét.
példa:
Namespace1.ClassX.MethodA()
-
adja hozzá a túlterhelt függvény paramétertípusait.
példa:
MethodA(int, string)
-
használd a’!’szimbólum a modul megadásához.
példa:
App1.dll!MethodA
-
használja a kontextus operátort natív C++nyelven.
{function, , }
példa:
{MethodA, , App1.dll}+2
-
-
a Nyelv legördülő menüben válassza ki a funkció nyelvét.
-
válassza az OK lehetőséget.
függvénytöréspont beállítása memóriacím használatával (csak natív C++ esetén)
egy objektum címe segítségével függvénytöréspontot állíthat be egy osztály egy adott példánya által meghívott metóduson. Például egy my_class
típusú címezhető objektum esetén beállíthat egy függvénytöréspontot a példány által meghívott my_method
metóduson.
-
állítson be egy töréspontot valahol az osztály példányának példányosítá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 > funkció töréspont lehetőséget, vagy nyomja meg a Ctrl + K, B billentyűkombinációt.
-
adja hozzá a következőt A függvény neve mezőhöz, majd válassza a C++ nyelv lehetőséget.
((my_class *) 0xcccccccc)->my_method
állítsa be az adatok töréspontjait (. Net Core 3.0 vagy magasabb)
az adatok töréspontjai megszakítják a végrehajtást, amikor egy adott objektum tulajdonsága megváltozik.
adat töréspont beállítása
-
egy. NET Core projektben indítsa el a hibakeresést, és várjon, amíg el nem ér egy töréspontot.
-
az Autos, Watch vagy Locals ablakban kattintson a jobb gombbal egy tulajdonságra, majd válassza a Break when value changes lehetőséget a helyi menüben.
a. net Core adat töréspontjai nem működnek:
- tulajdonságok, amelyek nem bővíthetők az eszköztippben, a helyiekben, az autókban vagy a Figyelőablakban
- statikus változók
- osztályok a DebuggerTypeProxy attribútummal
- mezők a struktúrákon belül
adat töréspontok beállítása (csak natív C++ esetén)
az adat töréspontok megszakítják a végrehajtást, ha egy megadott memóriacímen tárolt érték megváltozik. Ha az érték olvasható, de nem változik, a végrehajtás nem szakad meg.
adat töréspont beállítása:
-
egy c++ projektben indítsa el a hibakeresést, és várjon, amíg el nem éri a töréspontot. A hibakeresés menüben válassza az új töréspont > adat töréspont lehetőséget.
kiválaszthatja az új > adat töréspontot a töréspontok ablakban, vagy kattintson a jobb gombbal egy elemre az automatikus, a figyelő vagy a helyiek ablakban, majd válassza a szünet, amikor az érték megváltozik a helyi menüben.
-
a cím mezőbe írja be a memóriacímet vagy a memóriacímre kiértékelő kifejezést. Például írja be a
&avar
parancsot, ha aavar
változó tartalma megváltozik. -
a bájtok száma legördülő menüben válassza ki a hibakereső által megtekinteni kívánt bájtok számát. Például, ha a 4-et választja, a hibakereső figyeli a
&avar
– tól kezdődő négy bájtot, és megszakad, ha bármelyik bájt megváltoztatja az értéket.
az adatok töréspontjai nem működnek az alábbi feltételek mellett:
- a folyamat, amely nem hibakeresés ír a memória helyét.
- a memóriahely két vagy több folyamat között oszlik meg.
- a memóriahely frissül a kernelen belül. Például, ha a memória átkerül a 32 bites Windows
ReadFile
funkcióhoz, a memória kernel módból frissül, így a hibakereső nem szakad meg a frissítésen. - ahol az óra kifejezés nagyobb, mint 4 bájt 32 bites hardveren és 8 bájt 64 bites hardveren. Ez az x86 architektúra korlátozása.
Megjegyzés
-
az adatok töréspontjai az adott memóriacímektől függenek. A változó címe az egyik hibakeresési munkamenetről a másikra változik, így az adatok töréspontjai automatikusan le vannak tiltva minden hibakeresési munkamenet végén.
-
ha adat töréspontot állít be egy helyi változóra, akkor a töréspont engedélyezve marad a funkció befejezésekor, de a memóriacím már nem alkalmazható, így a töréspont viselkedése kiszámíthatatlan. Ha adat töréspontot állít be egy helyi változóra, akkor a függvény befejezése előtt törölje vagy tiltsa le a töréspontot.
töréspontok kezelése a töréspontok ablakban
a töréspontok ablak segítségével megtekintheti és kezelheti a megoldás összes töréspontját. Ez a központosított hely különösen hasznos egy nagy megoldásnál, vagy olyan összetett hibakeresési forgatókönyveknél, ahol a töréspontok kritikusak.
a töréspontok ablakban kereshet, rendezhet, szűrhet, engedélyezhet/letilthat vagy törölhet töréspontokat. Feltételeket és műveleteket is beállíthat, vagy új függvényt vagy adattöréspontot adhat hozzá.
a töréspontok ablak megnyitásához válassza a hibakeresés > Windows > töréspontok lehetőséget, vagy nyomja meg a Ctrl+Alt+B billentyűkombinációt.
a töréspontok ablakban megjelenítendő oszlopok kiválasztásához válassza az oszlopok megjelenítése lehetőséget. Válasszon egy oszlopfejlécet a töréspontok listájának az adott oszlop szerinti rendezéséhez.
töréspont címkék
a töréspontok ablakban a töréspontok listájának rendezésére és szűrésére címkék használhatók.
- címke törésponthoz való hozzáadásához kattintson a jobb gombbal a töréspontra a forráskódban vagy a töréspontok ablakban, majd válassza a Címkék szerkesztése lehetőséget. Adjon hozzá egy új címkét, vagy válasszon egy meglévőt, majd válassza az OK lehetőséget.
- rendezze a töréspontok listáját a töréspontok ablakban a címkék, feltételek vagy más oszlopfejlécek kiválasztásával. A megjelenítendő oszlopokat az eszköztár oszlopok megjelenítése elemének kiválasztásával választhatja ki.
töréspontok exportálása és importálása
a töréspontok állapotának és helyének mentéséhez vagy megosztásához exportálhatja vagy importálhatja őket.
- egyetlen töréspont XML-fájlba történő exportálásához kattintson a jobb gombbal a töréspontra a forráskód vagy töréspontok ablakban, majd válassza az Exportálás vagy a kiválasztott Exportálás lehetőséget. Válasszon ki egy exportálási helyet, majd válassza a Mentés lehetőséget. Az alapértelmezett hely a megoldás mappa.
- több töréspont exportálásához a töréspontok ablakban jelölje be a töréspontok melletti négyzeteket, vagy írja be a keresési feltételeket a keresőmezőbe. Jelölje ki az aktuális keresési feltételeknek megfelelő összes töréspont exportálása ikont, majd mentse a fájlt.
- az összes töréspont exportálásához törölje az összes mező jelölését, és hagyja üresen a keresőmezőt. Jelölje ki az aktuális keresési feltételeknek megfelelő összes töréspont exportálása ikont, majd mentse a fájlt.
- töréspontok importálásához a töréspontok ablakban jelölje ki a töréspontok importálása egy fájlikonból elemet, keresse meg az XML fájl helyét, majd válassza a Megnyitás lehetőséget.
töréspontok beállítása a hibakereső ablakokból
töréspontokat is beállíthat a Híváskötegből és a szétszerelő hibakereső ablakokból.
töréspont beállítása a hívási verem ablakban
ha azt az utasítást vagy Sort szeretné megszakítani, amelyhez a hívási funkció visszatér, beállíthat egy töréspontot a hívási verem ablakban.
töréspont beállítása a Hívásköteg ablakban:
-
a Hívásköteg ablak megnyitásához szüneteltetni kell a hibakeresés során. Válassza ki a Debug > Windows > hívási verem elemet, vagy nyomja meg a Ctrl+Alt+C billentyűkombinációt.
-
a Hívásköteg ablakban kattintson a jobb gombbal a hívás funkcióra, majd válassza a töréspont > töréspont beszúrása lehetőséget, vagy nyomja meg az F9 billentyűt.
egy töréspont szimbólum jelenik meg a függvényhívás neve mellett a hívásköteg bal margóján.
a hívásköteg töréspontja címként jelenik meg a töréspontok ablakban, olyan memóriahellyel, amely megfelel a függvény következő végrehajtható utasításának.
a hibakereső megszakad az utasításnál.
a híváscsomaggal kapcsolatos további információkért lásd: hogyan: a Híváscsomag használata ablak.
a töréspontok kódfuttatás közbeni vizuális nyomon követéséhez lásd: hibakeresés közbeni leképezési módszerek a híváskötegben.
töréspont beállítása a szétszerelési ablakban
-
a szétszerelési ablak megnyitásához szüneteltetni kell a hibakeresés során. Válassza a Debug > Windows > szétszerelés lehetőséget, vagy nyomja meg a Ctrl+Alt+D billentyűkombinációt.
-
a szétszerelés ablakban kattintson a megszakítani kívánt utasítás bal margójára. Kiválaszthatja azt is, majd nyomja meg az F9 billentyűt, vagy kattintson a jobb gombbal, és válassza a töréspont > töréspont beszúrása lehetőséget.
Lásd még:
- mi a hibakeresés?
- Írjon jobb C # kódot a Visual Studio használatával
- először nézze meg a hibakeresést
- a töréspontok hibaelhárítása A Visual Studio hibakeresőben