SORU
12 Temmuz 2009, Pazar


Bir İstisna oluşana Kadar GDB Uygulamayı çalıştırmak

Çok iş parçacıklı bir uygulama üzerinde çalışıyorum, ve GDB kullanarak hata ayıklamak istiyorum.

Sorun benim iş parçacığı bir ileti ölüyor:

pure virtual method called
terminate called without an active exception
Abort

Bu mesajı neden biliyorum, ama benim iplik oluştuğu hakkında hiçbir fikrim yok. Bir geri iz gerçekten yararlı olacaktır.

GDB içinde uygulamamı çalıştırdığımda, bir iş parçacığı askıya alınmış veya devam her zaman duraklar. Benim uygulama iş parçacığı bir noktada her şeyin bir geri iz alabilirim, böylece durdurmak gerekir, bu durum, birlikte ölecek kadar normal olarak çalışmaya devam etmek istiyorum.

CEVAP
12 Temmuz 2009, Pazar


Bir "" (catch throw) özel durum oluşturulur noktada. hata ayıklayıcı durdurmak için catchpoint kullanmayı deneyebilirsiniz

Gdb manuel excerpt aşağıdaki catchpoint özelliği anlatılmaktadır.

< / ^ hr .

5.1.3 catchpoints Ayarı

Catchpoints hata ayıklayıcı program olayları, C özel durumlar veya paylaşımlı bir kitaplık yükleme gibi belirli türde için durdurmak için neden olur. Catch komutu bir catchpoint ayarlamak için kullanın.

  • yakalaolay

    Ne zaman durolayoluşur. olay aşağıdakilerden biri olabilir:

    • at

      C bir istisna atma.

    • yakala

      C bir istisna yakalamak.

    • exec

      Bir ara exec. Şu anda HP-UX için kullanılabilir.

    • çatal

      Bir ara çatal. Şu anda HP-UX için kullanılabilir.

    • vfork

      Bir ara vfork. Şu anda HP-UX için kullanılabilir.

    • yükyayük libname

      Herhangi bir dinamik yükleme kitaplık veya kütüphane libname yükleme paylaştı. Şu anda HP-UX için kullanılabilir.

    • boşaltınyalibname boşaltın

      Herhangi bir dinamik olarak kaldırılmasını paylaşılan kitaplık veya kütüphane libname kaldırılmasını yüklendi. Şu anda HP-UX için kullanılabilir.

  • tcatch olay

    Sadece bir durdurmak için etkin bir catchpoint ayarlayın. Bu catchpoint otomatik olarak olay yakalanıyor sonra ilk kez silinir.

info break komutu geçerli catchpoints listelemek için kullanın.

Şu anda C GDB özel durum işleme (at yakalamak yakalamak) için bazı sınırlamalar vardır:

* If you call a function interactively, GDB normally returns control to you when the function has finished executing. If the call raises an exception, however, the call may bypass the mechanism that returns control to you and cause your program either to abort or to simply continue running until it hits a breakpoint, catches a signal that GDB is listening for, or exits. This is the case even if you set a catchpoint for the exception; catchpoints on exceptions are disabled within interactive calls.

* You cannot raise an exception interactively.

* You cannot install an exception handler interactively.

Bazen yakalamak değil en iyi yolu, hata ayıklama özel durum işleme: illa bilmek istiyorsan tam olarak nerede bir istisnadır büyüttüm, daha iyi durdurmak önce bir istisna işleyicisi olarak adlandırılan bu yana bu şekilde görebilirsiniz yığını önce herhangi bir çözülme gerçekleşir. Eğer bir özel durum işleyicisi içinde bir kesme noktası yerine ayarlarsanız, özel durumu oluşturuldu bulmak için kolay olmayabilir.

Bir özel durum işleyicisi denir önce durdurmak için, uygulama bilgisine ihtiyacım var. GNU C durumunda , istisna bir kütüphane işlevi __adlı_istisna yükseltmeyi aşağıdaki C arabirimi bir ANSI vardır: tarafından yetiştirilir

/* addr is where the exception identifier is stored.
   id is the exception identifier.  */
void __raise_exception (void **addr, void *id);

Hata ayıklayıcı herhangi bir çözülme yığını önce tüm özel durumları yakalamak için gerçekleşir, __bir kesme noktası ayarlayın_istisna (bölüm Kesme; dikkat edilmesi gereken hususlar; ve istisnalar) kaldırın.

Id değerine bağlı koşullu kesme noktası (bölüm Sonu koşulları ile, belirli bir özel durum ortaya çıktığında programı durdurabilirsiniz. Birden çok koşullu kesme noktaları istisnalar bir dizi herhangi yükseldiği zaman programınızı durdurmak için kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • Migs351

    Migs351

    3 HAZİRAN 2007
  • TheGamer2323

    TheGamer2323

    25 Ocak 2009