WebHU - Programozási kérdések és válaszok

gdb fogáspont csak a nem elkapott C++ kivételekhez?

Meg tudom mondani a gdb hibakeresőnek, hogy álljon le, amint bármilyen C++ kivételt dob, ha beállítok egy fogási pontot a gdb paranccsal

catch throw

Van azonban valami mód arra, hogy csak az nem elkapott C++ kivételeknél álljunk meg (például a C#-ban vagy a Java-ban)? Ez bizonyos helyzetekben sokkal könnyebbé tenné a hibák megtalálását.

Kösz!


  • kapcsolódó - Hogyan találhatom meg, hogy a C++-ban hol történt kivétel? 19.04.2011
  • Azt hiszem, nem értem – hogyan lehet megállapítani, hogy egy kivételt nem sikerült-e elkapni, azon kívül, hogy hagyjuk kibontakozni, amíg át nem töri a felső szintet? 19.04.2011
  • Nos, azt hiszem, a gdb-nek ellenőriznie kell, hogy a kivételt elkapták-e vagy sem mielőtt ténylegesen feltekerné a veremet. Nem tudom, hogy a C# vagy a Java hogyan oldja meg ezt, de kíváncsi vagyok, hogy C++-ban így is meg lehet-e csinálni. 19.04.2011
  • @Mat: a C++ implementációtól függ, de teljesen kivitelezhető, hogy a kivételkezelő kód kétszer is meg tud nézni a veremben: egyszer, hogy megtudja, van-e fogási pont, majd újra a verem feltekeréséhez. Ne feledje, hogy az implementáció határozza meg, hogy egy nem elkapott kivétel eredményeként a destruktorok a verem végéig hívódnak-e, vagy a terminate azonnali hívását eredményezi-e a verem feloldása nélkül. 19.04.2011
  • A kézi módszer (ha kivételesek) a catch throw és catch catch. Ez leáll, amikor kivételt dobnak (jelölje meg, hogy hol), majd amikor elkapják, ha continue után a programhívások nem elkapott kivétellel fejeződnek be (azaz nem áll meg a catch catch-ben, tudja, hol történt az utolsó dobás) 19.04.2011
  • @Steve Jessop: köszönöm az információt, ez érthető. 19.04.2011
  • A GNU C++ kivétel implementációja valójában bejárja az egész veremet, hogy megnézze, van-e kezelő, mielőtt bármilyen keretet feldobna. Vannak nyelvek, ahol a kezelőnek a kivételt kiváltó keret tetején kell futnia (Common Lisp?), és az új GNU C++ kivételkezelő rendszert tervező emberek mind C++-szerű, mind CL- mint a nyelvek, hogy képesek legyenek megosztani a veremeket és a kivételgépeket. Tehát az információ megvan. (Sajnos nem tudom a választ arra a kérdésre, hogy a GDB el tudja-e fogni ezeket.) 19.04.2011
  • (Soha nem használtam a GDB szolgáltatásait ezen a területen, mert mindig tönkrementek. Én pedig GDB fejlesztő voltam. :( ) 19.04.2011

Válaszok:


1

Ha egy kivételt nem sikerült elkapni, a speciális könyvtárfüggvény terminate()< /strong> automatikusan meghívásra kerül. A terminate valójában egy függvényre mutató mutató, az alapértelmezett érték pedig a Standard C függvénytár függvénye abort()< /a>. Lehet, hogy beállíthat egy töréspontot a abort() függvényt, és azonosítsa onnan a nem elkapott kivétel helyét.

break abort
...
run
...
bt

Telepítheti saját terminate() függvényét a std::set_terminate() használatával. A gdb terminate függvényében töréspontot kell tudnia beállítani. Lehet, hogy létrehozhat egy verem visszakövetést a terminate() függvény és ez a visszakövetés segíthet a kivétel helyének azonosításában. További részletek: itt.

19.04.2011
  • Köszönöm, nekem működik a set_terminate() -val - g++ 4.5.0, gdb 7.2 használatával 19.04.2011
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..


    © 2024 webhu.ru, WebHU - Programozási kérdések és válaszok