Aracılığıyla paylaş


Nasıl Yapılır: Windows Hizmet Uygulamalarında Hata Ayıklama

Not

Bu makale .NET'te barındırılan hizmetler için geçerli değildir. ve Çalışan Hizmeti şablonunu kullanan Microsoft.Extensions.Hosting.BackgroundService Windows hizmetleriyle ilgili en son içerik için bkz:

Bir hizmet, Visual Studio'nun içinden değil Services Denetim Yöneticisi bağlamında çalıştırılmalıdır. Bu nedenle, bir hizmette hata ayıklamak diğer Visual Studio uygulama türlerinde hata ayıklamak kadar kolay değildir. Bir hizmette hata ayıklamak için hizmeti başlatmanız ve ardından çalıştığı işleme bir hata ayıklayıcı eklemeniz gerekir. Ardından Visual Studio'nun tüm standart hata ayıklama işlevlerini kullanarak uygulamanızda hata ayıklayabilirsiniz.

Dikkat

Sürecin ne olduğunu bilmediğiniz ve bu işleme bağlanmanın ve muhtemelen öldürmenin sonuçlarını anlamadığınız sürece bir işleme eklememelisiniz. Örneğin, WinLogon işlemine ekleyip hata ayıklamayı durdurursanız, sistem WinLogon olmadan çalışamadığı için durur.

Hata ayıklayıcıyı yalnızca çalışan bir hizmete ekleyebilirsiniz. Ek işlemi hizmetinizin geçerli çalışmasını kesintiye uğratır; aslında hizmetin işlemesini durdurmaz veya duraklatmaz. Başka bir ifadeyle, hata ayıklamaya başladığınızda hizmetiniz çalışıyorsa, siz hata ayıklarken teknik olarak hala Başlatıldı durumundadır, ancak işlemesi askıya alınmıştır.

İşleme ekledikten sonra kesme noktaları ayarlayabilir ve kodunuzda hata ayıklamak için bunları kullanabilirsiniz. İşleme eklemek için kullandığınız iletişim kutusundan çıktıktan sonra, etkili bir şekilde hata ayıklama modundasınızdır. Services Control Manager'ı kullanarak hizmetinizi başlatabilir, durdurabilir, duraklatabilir ve devam edebilirsiniz; böylece ayarladığınız kesme noktalarına erişebilirsiniz. Hata ayıklama başarılı olduktan sonra bu sahte hizmeti daha sonra kaldırabilirsiniz.

Bu makale, yerel bilgisayarda çalışan bir hizmette hata ayıklamayı kapsar, ancak uzak bir bilgisayarda çalışan Windows Hizmetleri'nin hatalarını da ayıklayabilirsiniz. Bkz. Uzaktan Hata Ayıklama.

Not

Services Control Manager bir hizmeti başlatma girişimlerine OnStart 30 saniyelik bir sınır getirdiğinden yöntemin hata ayıklaması zor olabilir. Daha fazla bilgi için bkz . Sorun Giderme: Windows Hizmetlerinde Hata Ayıklama.

Uyarı

Hata ayıklama için anlamlı bilgiler almak için, Visual Studio hata ayıklayıcının hata ayıklanan ikili dosyalar için sembol dosyalarını bulması gerekir. Visual Studio'da oluşturduğunuz bir hizmette hata ayıklaması yapıyorsanız, simge dosyaları (.pdb dosyaları) yürütülebilir dosya veya kitaplıkla aynı klasördedir ve hata ayıklayıcı bunları otomatik olarak yükler. Oluşturmadığınız bir hizmette hata ayıklaması yapıyorsanız, önce hizmetin simgelerini bulmanız ve hata ayıklayıcı tarafından bulunadığından emin olmanız gerekir. Bkz . Visual Studio Hata Ayıklayıcısı'nda Simge (.pdb) ve Kaynak Dosyaları Belirtme. Bir sistem işleminde hata ayıklarken veya hizmetlerinizde sistem çağrıları için semboller olmasını istiyorsanız, Microsoft Sembol Sunucuları'nı eklemeniz gerekir. Bkz. Hata Ayıklama Simgeleri.

Hizmette hata ayıklamak için

  1. Hata ayıklama yapılandırmasında hizmetinizi oluşturun.

  2. Hizmetinizi yükleyin. Daha fazla bilgi için bkz . Nasıl yapılır: Hizmetleri Yükleme ve Kaldırma.

  3. Hizmetinizi Services Control Manager, Sunucu Gezgini veya koddan başlatın. Daha fazla bilgi için bkz . Nasıl yapılır: Hizmetleri Başlatma.

  4. Sistem işlemlerine ekleyebilmeniz için Visual Studio'yu yönetici kimlik bilgileriyle başlatın.

  5. (İsteğe bağlı) Visual Studio menü çubuğunda Araçlar, Seçenekler'i seçin. Seçenekler iletişim kutusunda Hata Ayıklama, Simgeler'i seçin, Microsoft Sembol Sunucuları onay kutusunu seçin ve ardından Tamam düğmesini seçin.

  6. Menü çubuğunda Hata Ayıklama veya Araçlar menüsünden İşleme Ekle'yi seçin. (Klavye: Ctrl+Alt+P)

    İşlemler iletişim kutusu görüntülenir.

  7. Tüm kullanıcılardan işlemleri göster onay kutusunu seçin.

  8. Kullanılabilir İşlemler bölümünde hizmetiniz için işlemi seçin ve ardından Ekle'yi seçin.

    İpucu

    İşlem, hizmetinizin yürütülebilir dosyasıyla aynı ada sahip olur.

    İşleme Ekle iletişim kutusu görüntülenir.

  9. uygun seçenekleri belirleyin ve ardından tamam'ı seçerek iletişim kutusunu kapatın.

    Not

    Artık hata ayıklama modundasınız.

  10. Kodunuzda kullanmak istediğiniz kesme noktalarını ayarlayın.

  11. Services Control Manager'a erişin ve kesme noktalarınıza ulaşmak için durdurma, duraklatma ve devam etme komutları göndererek hizmetinizi işleyin. Services Denetim Yöneticisi'ni çalıştırma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Hizmetleri Başlatma. Ayrıca bkz . Sorun Giderme: Windows Hizmetlerinde Hata Ayıklama.

Windows Hizmetleri için hata ayıklama İpuçları

Hizmetin işlemine eklemek, o hizmetin kodunda hata ayıklama işleminin tümünü değil, çoğunu ayıklamanıza olanak tanır. Örneğin, hizmet zaten başlatılmış olduğundan, hizmetin yönteminde veya hizmeti OnStart bu şekilde yüklemek için kullanılan yöntemdeki kodda Main hata ayıklayamazsınız. Bu sınırlamayı geçici olarak gidermenin bir yolu, hizmet uygulamanızda yalnızca hata ayıklamaya yardımcı olacak geçici bir ikinci hizmet oluşturmaktır. Her iki hizmeti de yükleyebilir ve hizmet işlemini yüklemek için bu sahte hizmeti başlatabilirsiniz. Geçici hizmet işlemi başlattıktan sonra, hizmet işlemine eklemek için Visual Studio'daki Hata Ayıklama menüsünü kullanabilirsiniz.

İşleme ekleyene Sleep kadar eylemi geciktirmek için yöntemine çağrı eklemeyi deneyin.

Programı normal bir konsol uygulamasına değiştirmeyi deneyin. Bunu yapmak için, yöntemi aşağıdaki gibi yeniden yazarak Main nasıl başlatıldıklarına bağlı olarak hem Windows Hizmeti hem de konsol uygulaması olarak çalıştırabilirsiniz.

Nasıl yapılır: Windows Hizmetini konsol uygulaması olarak çalıştırma

  1. hizmetinize ve OnStop yöntemlerini çalıştıran OnStart bir yöntem ekleyin:

    internal void TestStartupAndStop(string[] args)  
    {  
        this.OnStart(args);  
        Console.ReadLine();  
        this.OnStop();  
    }  
    
  2. yöntemini aşağıdaki gibi yeniden yazabilirsiniz Main :

    static void Main(string[] args)  
    {  
        if (Environment.UserInteractive)  
        {  
            MyNewService service1 = new MyNewService(args);  
            service1.TestStartupAndStop(args);  
        }  
        else  
        {  
            // Put the body of your old Main method here.  
        }  
    }
    
  3. Projenin özelliklerinin Uygulama sekmesinde Çıkış türünü Konsol Uygulaması olarak ayarlayın.

  4. Hata Ayıklamayı Başlat 'ı (F5) seçin.

  5. Programı yeniden Windows Hizmeti olarak çalıştırmak için, programı yükleyin ve bir Windows Hizmeti için her zamanki gibi başlatın. Bu değişiklikleri geri almak gerekmez.

Bazı durumlarda, örneğin yalnızca sistem başlangıcında oluşan bir sorunun hatalarını ayıklamak istediğinizde Windows hata ayıklayıcısını kullanmanız gerekir. Windows Sürücü Seti'ni (WDK) indirin ve bkz . Windows Hizmetlerinde hata ayıklama.

Ayrıca bkz.