Ana Sayfa Microsoft .NETAsp.Net Visual Studio ile Remote Debugging Nasıl Yapılır?

Visual Studio ile Remote Debugging Nasıl Yapılır?

by Sinan BOZKUŞ
12.024 kez okundu

Yazılım geliştiriciler olarak yaşadığımız en büyük sorunlardan bir tanesi kendi geliştirme ortamımız üzerinde çalışan kodların farklı bir ortama veya uzak sunucuya yüklendiğinde istendiği gibi çalışmama durumudur. Sorunun kaynağına erişmek için kimi zaman log yazar kimi zaman ise kodumuzda düzenleme yapar ve sunucu üzerinde tekrar tekrar deneriz. Visual Studio üzerinde  bulunan Remote Debugging özelliği işte tam olarak da bu sorunumuza bir çözüm sunuyor. Uzak bir sunucu üzerinde çalışan kodlarımızı kendi geliştirme ortamımız üzerinden satır satır debug yapabiliriz.

Hızlıca bu işlemi nasıl yapacağımıza bakalım. Öncelikle bu işlemi yapabilmemiz için sunucumuzda bir yazılıma ihtiyaç duymaktayız. Sunucu kendimize ait ise bu kurulumu yapabilir, değilse hizmet sağlayıcımızdan talepte bulunabiliriz.

 

Not: Güvenlik nedeniyle paylaşımlı hosting hizmeti veren firmalar remote debugging talebinizi kabul etmeyebilirler.

 

https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging adresine giriyoruz ve kullandığımız Visual Studio sürümüne göre ilgili dosyayı seçip indiriyoruz. “VS_RemoteTools.exe” adında bir dosya indireceğiz.

Visual Studio 2019 için direkt link:
https://aka.ms/vs/16/release/RemoteTools.amd64ret.enu.exe

 

Not: Makale içerisindeki örnekler Visual Studio 2019 üzerinden anlatılacaktır.

 

Şimdi indirmiş olduğumuz dosyayı sunucumuz üzerine kurabiliriz. Kurulum esnasında özel bir konfigürasyon gerekmeyeceğinden sadece “Install” butonuna basarak kurulum işlemini gerçekleştiriyoruz.

Kurulum sonrasında Remote Debugger servisimizin aktif olup olmadığını kontrol etmek için komut satırına “services.msc” yazarak Windows servislerinin listelendiği ekrana geliyoruz.

 

 

Açılan listede “Visual Studio 2019 Remote Debugger” servisini (Visual Studio sürümüne göre değişir) buluyoruz. Eğer durumu “Running” olarak gözüküyorsa bir değişilik yapmamız gerekmiyor.

 

 

Yukarıdaki ekran görüntüsünde olduğu gibi servisimiz çalışır durumda değilse servisimize çift tıklayarak detay sayfasına gidiyoruz. Burada önce “Startup Type” ı “Manuel” olarak değiştirip apply butonuna basıyor, ardından da “Start” butonuna basarak servisimizi çalışır hale getiriyoruz. Son hali aşağıdaki gibi olmalı ve Service status durumu “Running” olmalıdır.

 

 

Remote Debugging konusunda bizi kısıtlayacak en büyük problem network erişimi olacaktır. Bu nedenle Visual Studio sürümümüze göre aşağıdaki portların sunucu üzerinde dışarıdan erişilebilir olduğundan emin olmalıyız. Benzer şekilde yerel bilgisayarımız üzerinden ilgili sunucudaki bu portlara erişimde bir kısıtlama olmamalıdır.

– Visual Studio 2019: 4024
– Visual Studio 2017: 4022
– Visual Studio 2015: 4020
– Visual Studio 2013: 4018
– Visual Studio 2012: 4016

Sunucu taraflı işlemlerimizi hallettikten sonra Visual Studio’ da debug yapmak istediğimiz projeyi açıp ve ardından “Debug” menüsüne gelip “Attach to Process” e tıklıyoruz.

 

 

Gelen ekranda Connection Type değerini “default” olarak seçip, Connection Target bölümüne sunucu ip adresimizi giriyor ve ardından enter tuşuna basıyoruz.

 

 

Sunucuya bağlanabilmemiz için bizden bir kullanıcı adı ve şifre isteyecek. Sunucumuzun rdp için kullandığımız Adminisrator kullanıcısı veya remote debugging için tanımladığımız ayrı bir kullanıcısı varsa onun bilgilerini girerek devam edebiliriz.

 


Kullanıcı bilgilerimizi doğru girdiysek karşımıza sunucu üzerinde çalışan processlerin listesi gelecektir.

 

Burada bilmemiz gereken çok önemli bir durum var. Remote debugging işlemini yapabilmek için duruma göre “dotnet.exe” yi veya “w3wp.exe” yi seçmemiz gerekecek. Bunu belirleyen temel sebep ise ASP.NET Core uygulamamızın “InProcess” mi yoksa “OutOfProcess” modunda mı çalıştığıdır. Bu tanımlama uygulamamızın .csproj’u içerisinde bulunan “AspNetCoreHostingModel” ile yapılır. InProcess model kullanıyorsak w3wp.exe’yi OutOfProcess model kullanıyorsak “dotnet.exe” yi seçmeliyiz.

 

Not: “InProcess/OutOfProcess nedir?” diyenler için hızlıca özet geçelim. En kısa tanımıyla InProcess yapıda IIS HTTP Server, Out Of Process yapıda ise Kestrel kullanılır. Detaylı bilgi için https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module adresine bakabiliriz.

 

İlgili process’i seçtikten sonra “Attach” butonuna basarak Remote Debugging işlemi başlatılır. Remote Debugging yapabilmek için sunucunuzdaki kodlar ile Visual Studio’nuz da bulunan kodlar birebir aynı olmalıdır. Aksi durumda remote debugging işlemi yapamayız.

Eğer breakpoint geçerli olmuyor ve “No symbols have been loaded” tarzında bir hata alıyorsak “Debug=>Options=>General” menüsünden “Enable Just My Code” kısmındaki check i kaldırıp deneyebiliriz.

Not: Remote Debugging işlemi bittikten sonra sunucuya gidip remote debugging servisini ve ilgili portları kapatmak uygulama güvenliği açısından faydalı olacaktır.

Bunlara da bakmak isteyebilirsiniz

Bir Yorum Bırakın