2015-03-20 20 views
5

Hataları günlüğe kaydetmek ve CHECK makroları ile onaylamayı kontrol etmek için google log kütüphanesini kullanan bir kütüphane kullanıyorum. Kodumda, CHECK koşulları başarısız olduğunda bir istisna yakalamak istiyorum (örneğin, uygulamalar mevcut olmadığı için bir dosyayı açamadığı zaman), ancak catch(...)'u kullanarak hiçbir şey yakalamıyor ve programın çökmesine neden oluyor. kontrol.google loglama kütüphanesinin CHECK makroları C++ istisnasını yakalama

CHECK makroları başarısız olduğunda bir istisna yakalamanın bir yolu var mı? Ya da, eğer mümkün değilse, bu durumların üstesinden gelmek için bir çözüm var mı? Glôg ait official document belirtildiği gibi

+0

Bir derleme zamanı veya çalışma zamanı değerlendirilmiş makrosunu KONTROL EDİYOR? –

+0

Bir çalışma zamanı değerlendirilmiş makrosu (ASSERT gibi) – gcswoosh

+0

İstisnai işlemek için Google kodunu kullanıyorsunuz ?! –

cevap

0

, sen

Kullanıcı tanımlı Başarısızlık Fonksiyonu

varsayılan çıkış() davranışını değiştirmek için kullanabilirsiniz.

Örnek: davranış bizim ihtiyaçlarına uygun olmayabilir bu yüzden

void YourFailureFunction() { 
    throw exception(); 
    } 
    int main(int argc, char* argv[]) { 
    google::InstallFailureFunction(&YourFailureFunction); 
    } 

Ancak, işlevi, bir yıkıcı denir. Benim durumumda, fonksiyon iki kez çağrılır ve istisnaın iki kez atılmasını önlemek için çok hoş olmayan bir hack uygulamak zorundayım.

bool alreadyThrown = false; 
void YourFailureFunction() { 
    if (!alreadyThrown) 
    { 
     alreadyThrown = true; 
     throw exception(); 
    } 
} 
İlgili konular