2014-05-23 7 views
5

क्या जीडीबी में बैक-ट्रेस खोए बिना अपवाद को फिर से फेंकना संभव है? या क्या जीडीबी में कुछ लाइनों और बैक ट्रेस को "बैक अप" करने का कोई तरीका है? मैं जीडीबी 7.7.1 पर हूं, सबसे हालिया।जीडीबी - कैच/रीथ्रो स्थिति में बैकट्रैक खोने से रोकें

मुझे कभी-कभी खुद को इस तरह की परिस्थितियों में भाग लेना पड़ता है, अपवाद के मूल फेंक, और की आवश्यकता होगी, से वापस ट्रेस बाहर टिप्पणी करने के लिए ट्राई/कैच भागों, फिर कंपाइल, और फिर से चल रहा gdb में।

try { 
    someFuncThatCanThrowException(); 
} catch(exceptionType& exception) { 
    if(@[email protected]) { 
     ... 
    } else { 
     throw; 
    } 
} 

---- या ----

try { 
    someFuncThatCanThrowException(); 
} catch(exceptionType& exception) { 
    exception.printMessageToCout(); 
    throw; 
} 

उत्तर

5

अपवाद के मूल फेंक से पीछे की ट्रेस की आवश्यकता है,

यह ठीक सभी बैकट्रैस मुद्रण के सभी फेंकता है और फिर जब यह एक विशेष अपवाद की एक पश्व-अनुरेखन लगाने के लिए आवश्यक है बस अपवाद के पते के आधार पर इसे खोजने का एक सरल दृष्टिकोण का उपयोग करने है। gdb के इस क्रम की तरह कुछ कमांड:

print &exception 

और gdb उत्पादन में इसका पता लगता है:

set pagination off 
catch throw 
commands 
info args 
bt 
c 
end 

जब आप पहली बार इस तरह, इसका पता प्रिंट, एक अपवाद के पश्व-अनुरेखन खोजने की जरूरत है। इसे info args द्वारा मुद्रित किया जाना चाहिए। जैसे ही आपको पता चलता है, info args आउटपुट के बाद इस अपवाद का बैकट्रैक होगा।

+0

इस प्रश्न में "कैच फेंक" कमांड की थोड़ी और चर्चा है, जो मुझे लगता है कि वास्तव में सही दृष्टिकोण है: http://stackoverflow.com/questions/10592568/can-gdb-be-used-to -backtrace-जब-अपवाद-कर रहे हैं पकड़ा – gkanwar

संबंधित मुद्दे