2014-05-23 19 views
5

yılında geri izleme kaybetme o gdb geri izleme kaybetmeden bir istisna rethrow mümkün mü? Veya gdb'de birkaç satır "geri" ve orada bir iz var mıdır? GDB 7.7.1, en yeni ben yaşıyorum.gdb - önle bir catch/rethrow durum

Bazen kendimi bu gibi durumlara koşarken buluyorum. orijinal istisna atmak ve ihtiyaç duymaktan geri iz yeniden derlemek, deneme/yakalama kısımlarını, yorum ve yeniden çalıştırmayı gdb için.

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

---- VEYA ----

try { 
    someFuncThatCanThrowException(); 
} catch(exceptionType& exception) { 
    exception.printMessageToCout(); 
    throw; 
} 
istisna orijinal atmak gelen bir arka iz gerek

cevap

5

,

Tüm atımların tüm geri izlerini yazdırmanın basit bir yaklaşımını kullanmak ve sonra özel bir istisnanın bir backtraceini bulmak gerektiğinde, yalnızca bu özel durumun adresiyle bulmak doğrudur. gdb bu dizinin gibi bir şey komutları:

print &exception 

Ve gdb çıktı adresini bulmak:

set pagination off 
catch throw 
commands 
info args 
bt 
c 
end 

öncelikle bu gibi adresini yazdırmak Bir istisna geri izleme bulmanız gerektiğinde. Bu info args tarafından basılmış olmalıdır. En kısa zamanda adresini bulmak olarak info args çıktı sonra bu istisna backtrace olacaktır.

+0

Ben aslında doğru bir yaklaşım olduğunu düşünüyorum bu soruya, içinde "yakalamak atmak" komutunun biraz daha tartışma vardır: http://stackoverflow.com/questions/10592568/can-gdb-be-used-to -backtrace-zaman-istisnalar-yakalanır – gkanwar