Hata: hata ayıklayıcısını adlı işlenmeyen özel durum süzgeci

Makale çevirileri Makale çevirileri
Makale numarası: 173652 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Win32 işlemleri bir __try / __except bloğu işlemi çapında temelinde ele alınma özel durumları yakalamak üzere işlenmeyen özel durum filtresi işlevini yükleyebilirsiniz. Bir işlem hata ayıklama, içindeki bir kesme noktası koyduğunuzda işlenmeyen özel durum süzgeci hiçbir zaman, yürütüldüğünde, bulun. Işlem ayıklanacak değil, ancak, işlenmeyen özel durum süzgeci beklendiği gibi denir.

Neden

Ayıklanacak işleminden çağrıldığında, uygulamanın yüklü işlenmeyen özel durum süzgeci UnhandledExceptionFilter() Win32 API işlevini çağırmaz.

Not UnhandledExceptionFilter() API işlemi ayıklanacak olmadığını belirler. Işlem ayıklanacak, UnhandledExceptionFilter API, özel durumu için hata ayıklayıcısını geçirir. Sonra işlenmeyen özel durum süzgeci UnhandledExceptionFilter API işlemini çağırır.

Çözüm

UnhandledExceptionFilter. ayıklanacak olanların yanı sıra ayıklanacak işlemler için uygulama yüklenmemiş olarak, işlenmeyen özel durum süzgeci çağırmalısınız.

Işlenmeyen özel durum süzgeci işlevi bir hata ayıklamak için bir yoldur bir __try put / __except main() veya WinMain() içinde kod geçici bloğu gibi işlev:
   void main (int argc, char **argv)
   {
      __try
      {
      // all of code normally inside of main or WinMain here...

      }
      __except (MyUnFilter (GetExceptionInformation()))
      {
         OutputDebugString ("executed filter function\n");
      }
   }
				
yalnızca main() veya WinMain() işlevi yürütmek için iş parçacığı adlı, bu iş etrafında biraz farklı bir işlenmeyen özel durum süzgecinden davranır. Çok iş parçacıklı bir uygulama hata ayıklaması yapıyorsanız ve benzer bir __try eklemek gereken, her iş parçacığı işlevi bloğu içinde __except /.

Istemediğiniz __try / bir işlenmeyen özel durum süzgeci hata ayıklamak için blokları __except onaylama işlemi gibi izleme gibi diğer yöntemleri kullanmanız gereken yeni eklemek için verir ve özel durum işleyici davranışını doğrulamak için hata ayıklama kodu.

Durum

Microsoft bu hatanın bu makalenin başında listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır. Biz bu hatayı araştırmak ve burada yeni bilgiler kullanılabilir olduğunda Microsoft Bilgi Bankası'ndaki deftere nakleder.

Daha fazla bilgi

Işlenmeyen özel durum süzgeci fonksiyonunun amacı, bir işlem dışında herhangi bir __try / bloğu __except oluşan özel durum yanıt olanağı vermek sağlamaktır. Işlenmeyen özel durum süzgeç işlemi çapında; herhangi bir iş parçacığı bir özel duruma neden olur, ancak bunu işlemez, işlenmeyen özel durum süzgeci adlı. Çağrıldığında, süzgeç işlevi özel durumun nedenini düzeltmek ve yürütülmesine devam edebilirsiniz ya da hata işlemi sonlandırır varsayılan işlenmeyen özel durum işleyicisine iletebilirsiniz.

Win32 uygulamaları bir işlem çapında işlenmeyen özel durum süzgeci SetUnhandledExceptionFilter() API işlevini kullanarak yükleyebilirsiniz. Microsoft Visual C++ C çalışma zamanı (CRT) kitaplığını başlatma kodunu bir __try uygulayan / __except main() işlevi geçici bloğu. Bir özel durum Bu bloğu tarafından yakalanan iletiler, kendi özel durum filtresi işlevini _XcptFilter, adlı denir. _XcptFilter iki yaptıklarının: Win32 özel signal() CRT işlev tarafından kullanılan sinyallerini eşleştirir ve için uygun işleyicileri sinyalleri gönderir. Ise (varsayılan olarak olduğu gibi), sinyal 's işleyicisi SIG_DFL için ayarlanır, _XcptFilter UnhandledExceptionFilter() APı'SINI çağırır.

UnhandledExceptionFilter() API işlemi ayıklanacak olmadığını belirler. Ardından UnhandledExceptionFilter özel durumu için hata ayıklayıcısını ilk geçirir. ve sonra işlemin işlenmeyen özel durum süzgeci call beklenir.

Daha sonra işlem ayıklanacak değil, UnhandledExceptionFilter işlemin işlenmeyen özel durum süzgeci çağırır. Bağlı olarak süzgeç işlevin dönüş değeri, UnhandledExceptionFilter yürütme özel durumu sırasında noktasına, devam veya uygulama işlenmeyen bir özel durum nedeniyle sona erdirilecek olan kullanıcıyı bilgilendiren bir sistem kalıcı iletişim kutusu görüntüler.

Davranışı yeniden oluşturma adımları

Aşağıdaki örnek kodu derlemek ve kesme noktası MyUnFilter içinde ayarlayın. Kesme hiçbir zaman isabet inceleyin.
   /*
      Demonstrates how to use SEH so that unhandled exception filter
      can trap unhandled instructions.
   */ 

   #include <windows.h>
   #include <stdio.h>

   LONG WINAPI MyUnFilter (struct _EXCEPTION_POINTERS *lpExceptionInfo);

   void main (void)
   {
      LPBYTE lpBuff = NULL;

      SetUnhandledExceptionFilter (MyUnFilter);

      *lpBuff = 54;
   }


   LONG WINAPI MyUnFilter (struct _EXCEPTION_POINTERS *lpExceptionInfo)
   {
      static int s_SigCount = 0;

      DWORD dwExceptCode = lpExceptionInfo -> ExceptionRecord ->
                           ExceptionCode;
      LONG  lResult;

      if (dwExceptCode == EXCEPTION_ACCESS_VIOLATION)
      {
         printf ("access violation caught by MyUnFilter\n");

         ++s_SigCount;

         // test case to keep this from going on forever (since we're not
         // fixing the AV)
            if (s_SigCount < 5)
               lResult = EXCEPTION_CONTINUE_EXECUTION;
            else
               lResult = EXCEPTION_EXECUTE_HANDLER;

      }
      else
         lResult = EXCEPTION_CONTINUE_SEARCH;

      return lResult;
   }
				

Özellikler

Makale numarası: 173652 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 4.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Win32 Uygulama Programlama Arabirimi, Ne zaman ne ile kullanilir:
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Anahtar Kelimeler: 
kbmt kbbug kbexcepthandling kbkernbase kbpending KB173652 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:173652

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com