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

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).

töréspont beállítása

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.

a töréspont végrehajtása leállt

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:

  1. 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.

     töréspont beállítások

  2. 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.

  3. 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 töréspont feltétel igaz

a következő példában a töréspont csak akkor jelenik meg, ha a testInt értéke megváltozik:

töréspont módosításkor

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:

  1. állítson be egy töréspontot a kódban az objektum létrehozása után.

  2. 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ó.

  3. 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.

  4. 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:

töréspont találatszám

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:

  1. 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.

  2. 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

  3. a Nyelv legördülő menüben válassza ki a funkció nyelvét.

  4. 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.

  1. állítson be egy töréspontot valahol az osztály példányának példányosítása után.

  2. keresse meg a példány címét (például 0xcccccccc).

  3. 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.

  4. 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

  1. egy. NET Core projektben indítsa el a hibakeresést, és várjon, amíg el nem ér egy töréspontot.

  2. 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.

     kezelt adatok töréspontja

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:

  1. 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.

  2. 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 a avar változó tartalma megváltozik.

  3. 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.

töréspontok ablak

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.

  1. 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.
  2. 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:

  1. 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.

  2. 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

  1. 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.

  2. 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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.