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.
Azokat a töréspontokat, amelyeket a feldolgozó a hibakereső kérésére vezérel, feldolgozói töréspontoknak vagy adattörési pontoknak nevezzük. A hibakereső által közvetlenül ellenőrzött töréspontokat szoftveres töréspontoknak nevezzük.
Jegyzet Bár az adattörési pontot gyakran használják a processzortörési pont szinonimájaként, ez a kifejezés félrevezető lehet. A töréspontoknak két alapvető típusa van: a processzor által szabályozott töréspontok, valamint a szoftveres töréspontok, amelyeket a hibakereső vezérel. A processzor töréspontjai általában programadatokon vannak beállítva – ezért nevezik őket "adattörési pontoknak", de végrehajtható kódra is beállíthatók. A szoftveres töréspontok általában végrehajtható kódra vannak beállítva, de programadatokon is beállíthatók. Sajnos a hibakeresési szakirodalom gyakran "adattöréspontokként" hivatkozik a processzortörési pontokra, még akkor is, ha végrehajtható kódra vannak beállítva.
Processzortörési pontok
A processzortörési pont egy adott memóriahely elérésekor aktiválódik. A processzor töréspontjainak négy típusa van, amelyek az azt kiváltó memóriahozzáférés típusának felelnek meg:
| Töréspont típusa | Tevékenység |
|---|---|
| e (végrehajtás) | Akkor aktiválódik, ha a processzor egy utasítást kér le a megadott címről. |
| r (olvasás/írás) | Akkor aktiválódik, ha a processzor a megadott címen olvas vagy ír memóriát. |
| w (írás) | Akkor aktiválódik, ha a processzor memóriát ír a megadott címre. |
| i (I/O) | A megadott cím I/O-portjának elérésekor aktiválódik. |
Minden processzortörési ponthoz tartozik méret. Egy w (írási) processzor töréspont például beállítható a 0x70001008 címen, négy bájt méretben. Ez az 0x70001008 és a 0x7000100B közötti címblokkot figyeli. Ha erre a memóriablokkra van írva, a töréspont aktiválódik.
Előfordulhat, hogy a processzor olyan műveletet hajt végre egy memóriarégióban, amely átfedésben van a megadott régióval, de nem azonos a megadott régióval. Az előző bekezdésben megadott példában egy olyan írási művelet, amely magában foglalja a 0x70001000 és 0x7000100F közötti tartományt, vagy egy írási művelet, amely csak az 0x70001009 bájtot tartalmazza, átfedő (átnyúló) művelet lenne. Ilyen esetben a töréspont aktiváltsága processzorfüggő. A helyzet adott processzoron történő kezelésének részleteiért tekintse meg a processzorarchitektúra kézikönyvét, és keresse meg a "hibakeresési regisztert" vagy a "hibakeresési vezérlőregisztrálást". Ha például egy adott processzortípust szeretne figyelembe venni, x86-os processzor esetén az olvasási vagy írási töréspont akkor aktiválódik, amikor a elért tartomány átfedésben van a töréspont-tartománysal.
Hasonlóképpen, ha egy e (végrehajtási) töréspont van beállítva a 0x00401003 címre, majd a 0x00401002 és 0x00401003 címekre kiterjedő két bájtos utasítás lesz végrehajtva, az eredmény processzorfüggő. A részletekért tekintse meg a processzorarchitektúra kézikönyvét.
A processzor különbséget tesz a felhasználói módú hibakereső által beállított töréspontok és a kernelmódú hibakereső által beállított töréspontok között. A felhasználói módú processzortörési pontok nem befolyásolják a kernel módú folyamatokat. A kernelmódú processzortörések hatással lehetnek a felhasználói módú folyamatokra attól függően, hogy a felhasználói módú kód a hibakeresési regisztrációs állapotot használja-e, és hogy van-e csatolva felhasználói módú hibakereső.
Ha az aktuális folyamat meglévő adattörési pontjait egy másik regiszterkörnyezetre szeretné alkalmazni, használja az .apply_dbp (Adattöréspont alkalmazása a környezetbe) parancsot.
Többprocesszoros számítógépeken minden processzortörési pont az összes processzorra vonatkozik. Például, ha az aktuális processzor a 3-as, és a ba e1 MyAddress parancsot használja a töréspont elhelyezéséhez a MyAddress címen, akkor bármely processzor -- nem csak a 3-as processzor -- amely azon a címen hajt végre, aktiválja a töréspontot. Ez a szoftveres töréspontokra is érvényes.
Szoftveres töréspontok
A szoftveres töréspontokat a hibakereső a processzor töréspontjaitól eltérően szabályozza. Amikor a hibakereső egy szoftveres töréspontot állít be egy helyen, ideiglenesen egy törésutasításra cseréli a memóriahely tartalmát. A hibakereső megjegyzi ennek a helynek az eredeti tartalmát, így ha ez a memória megjelenik a hibakeresőben, a hibakereső nem a törésutasítást, hanem az adott memóriahely eredeti tartalmát jeleníti meg. Amikor a célfolyamat ezen a helyen hajtja végre a kódot, a megszakítási utasítás hatására a folyamat megszakad a hibakeresőben. Miután végrehajtotta a választott műveleteket, a célt újra futtathatja, és a végrehajtás azzal az utasítással folytatódik, amely eredetileg azon a helyen volt.
A processzortöréspontok típusainak rendelkezésre állása
Az i (i/o) lehetőség csak kernel módú hibakeresés során érhető el.
Nem minden adatméret használható az összes processzortörési ponttípushoz. Az engedélyezett méretek a célszámítógép processzorától függenek. További részletekért lásd: ba (Hozzáférés megszakítása).
A szoftveres töréspontok és a processzortörési pontok korlátozásai
A bp vagy a bm /a parancsok használatakor a programcím helyett megadhat egy adatcímet. Az adathely megadása esetén azonban ezek a parancsok szoftveres töréspontokat hoznak létre, nem pedig processzortörési pontokat. Amikor a hibakereső egy szoftveres töréspontot helyez el egy helyen, az ideiglenesen egy törésutasításra cseréli a memóriahely tartalmát. Ez nem rontja a végrehajtható lemezképet, mert a hibakereső megjegyzi ennek a helynek az eredeti tartalmát, és amikor a célfolyamat megpróbálja végrehajtani ezt a kódot, a hibakereső megfelelően tud válaszolni. Ha azonban egy szoftveres töréspont adathelyre van állítva, az eredményül kapott felülírás adatsérüléshez vezethet. Ezért egy szoftveres töréspont adathelyen való beállítása csak akkor biztonságos, ha biztos abban, hogy ez a hely csak végrehajtható kódként lesz használva.
A bp, bu és bm parancsok úgy állítják be a szoftver töréspontjait, hogy a processzor utasítását egy törésutasításra cserélik. Ezért ezek nem használhatók írásvédett kódban vagy más olyan kódban, amely nem írható felül. Ha töréspontot szeretne létrehozni ilyen kódban, a e (végrehajtás) opcióval kell használni a ba (Hozzáférés alapú megszakítás) lehetőséget.
Nem hozhat létre több olyan processzortörési pontot ugyanazon a címen, amelyek csak abban a parancsban különböznek, amelyet a töréspont aktiválásakor automatikusan végrehajtanak. Ugyanakkor több töréspontot is létrehozhat ugyanazon a címen, amelyek eltérnek a többi korlátozástól (például több töréspontot is létrehozhat ugyanazon a címen a ba paranccsal a /p, /t, /c és /C beállítások különböző értékeivel).
A felhasználói módú folyamatok kezdeti töréspontja (általában a fő függvényen vagy annak megfelelőjén van beállítva) nem lehet processzortörési pont.
A támogatott processzortörési pontok száma a célprocesszor architektúrájától függ.
Szoftveres töréspontok és processzortöréspontok szabályozása
A szoftveres töréspontok a bp (Set Breakpoint), a bm (Set Symbol Breakpoint) és a bu (Set Unresolved Breakpoint) parancsokkal hozhatók létre. A processzortörési pontok a ba (Break on Access) paranccsal hozhatók létre. A töréspontok letiltására, engedélyezésére és módosítására vonatkozó parancsok mindenféle töréspontra érvényesek. A töréspontok listáját megjelenítő parancsok tartalmazzák az összes töréspontot, és jelzik az egyes töréspontok típusát. A parancsok listáját a töréspontok vezérlésének módszerei című témakörben találhatja meg.
A WinDbg Töréspontok párbeszédpanelen az összes töréspont megjelenik, és a processzor töréspontjait az "e", "r", "w" vagy "i" jelöléssel jelöli, majd a blokk méretét. Ez a párbeszédpanel bármely töréspont módosítására használható. A párbeszédpanel Parancs szövegmezője bármilyen töréspont létrehozásához használható. Ha processzortörési pontra van szükség, kezdje a bemenetet a "ba" betűvel. Ha a WinDbg Szétszerelés ablakában vagy a Forrás ablakban az egérrel állít be töréspontot, a hibakereső létrehoz egy megoldatlan szoftveres töréspontot.
A processzor töréspontjai a processzor hibakeresési nyilvántartásaiban vannak tárolva. A hibakeresési regiszter értékének manuális szerkesztésével lehetőség van töréspont beállítására, de ez erősen nem ajánlott.