C#, Asp.Net, .Net Core
C# İle Yazılan Uygulamanın Nerede Hata Verdiğini Bilmek
C# İle Yazılan Uygulamanın Nerede Hata Verdiğini Bilmek
-
Merhaba,
Visual Studio da geliştirdiğim bir uygulama bazı bilgisayarlarda hata veriyor. Debug esnasında hangi satırda ne yaparken hata verdiğini bulmak kolay ama başka bir bilgisayarda bunu nasıl öğrenebilirim? Bunun bir yolu var mı? Hataları ya da tüm işlemleri nasıl loglayabiliriz ve bu logları hatayı tespit etmek amacıyla nasıl kullanabilirim? Önerisi olan var mıdır?
Sevgiler.
RockZs tarafından 18/Tem/19 20:21 tarihinde düzenlenmiştir -
Nuget'ta mevcut olan NLog kütüphanesine bakmanı öneririm. Bu kütüphaneyle uygulaman hata verdiğinde hataları ya da önemli gördüğün noktalarda istediğin şeyleri loglayabilirsin. Bu logları dosyaya yazabilirsin, database varsa oraya kaydedebilirsin, HTTP ile uzak sunucuna gönderebilirsin. Envai çeşit seçenek içinden kendine uygun olanı seçebilirsin. NLog oldukça kapsamlı bu konuda.
-
Tawe bunu yazdı
Nuget'ta mevcut olan NLog kütüphanesine bakmanı öneririm. Bu kütüphaneyle uygulaman hata verdiğinde hataları ya da önemli gördüğün noktalarda istediğin şeyleri loglayabilirsin. Bu logları dosyaya yazabilirsin, database varsa oraya kaydedebilirsin, HTTP ile uzak sunucuna gönderebilirsin. Envai çeşit seçenek içinden kendine uygun olanı seçebilirsin. NLog oldukça kapsamlı bu konuda.
Tavsiye ve açıklama için teşekkür ederim. İyi bir kütüphaneye benziyor. Deneyeceğim.
-
Log tut hocam C de temp diye bir klasor olustur oraya .txt olarak tut.
ayrı bir class olustur ornegın LogClass diye hata olabilecek yada genel butun kod bloklarını Try Catch arasında yaz zaten hata verince catch bloguna dusecek exception fırlatacak sana sende exception a dustugu yerde da logla
ancak boyle bulabılırsın eger uygulaman web uygulamasıysa configden adama kendini baglar oyle bulabilirsin ama ilk yazdıgım maddeyi heryerde kullanabilirsin
edit: calıstıgım şirkette kendi yazdıgım bir log yapısı bu hocam
ornegin LogClass.cs diye bir yere yaz bunu cagar dur bunu her hareketını logla
public static void Log(string pAppName, string pMsg)
{
string sess_info = "";
string msg = "";
try
{
string filename = Get_Log_File_Path();
if (File.Exists(filename))
msg = System.IO.File.ReadAllText(filename);msg += "_" + DateTime.Now.ToString("dd/MM/yy HH:mm:ss") + "_" + sess_info + pAppName + " " + pMsg + Environment.NewLine;
System.IO.File.WriteAllText(filename, msg);}
catch (Exception ex)
{
Common.Log("Log Error", ex.Message);
}
}private static string Get_Log_File_Path()
{
string res = "";
string today_log_file = "Senin_program_adin" + DateTime.Now.ToString("yyMMdd") + "_" + typeof(Common).Namespace + ".log";string temp_path = Get_Log_Path();
res = Path.Combine(temp_path, today_log_file);
if (Directory.Exists(temp_path) == false)
{
try
{
Directory.CreateDirectory(temp_path);
}
catch (Exception ex)
{
res = "c:\\" + today_log_file;
try
{
Log("hede hodo", "Unable to access to program files directory (" + res + ") for logging : " + ex.Message);
}
catch (Exception)
{
}
}
}return res;
}public static string Get_Log_Path()
{
string temp_path = Path.GetDirectoryName(Environment.GetFolderPath(Environment.SpecialFolder.System));
temp_path = Path.Combine(temp_path, "temp");
temp_path = Path.Combine(temp_path, "HedeHodo_Logs");return temp_path;
ILKER06 tarafından 19/Tem/19 00:17 tarihinde düzenlenmiştir
} -
Çok teşekkürler. Log tutmak önemli.
Yaptığım bi' uygulama bazı bilgisayarlarda başka hiç bir mesaj olmadan "uygulama çalışmayı durdurdu" hatası veriyor. Maksadım bunun nedenini anlamak çünkü çoğunlukta çalışırken azınlık olarak böyle bir hata vermesi can sıkıcı. Kullanıcı tarafında hatayı anlamak kolay olmuyor.
Her mekanizmada try catch yapısı kullanmak mantıklı. Bunu javascript te bolca kullansam da C# uygulamamda bu pek fazla yok diyebilirim.
Keşke mevcut uygulamaya birşey ekleyebilsem ve bana nerede hata verdiğini gösterse. Böyle birşey lazım. Bu benim için çabuk ve kolay bir çözüm olurdu.
-
RockZs bunu yazdı
Çok teşekkürler. Log tutmak önemli.
Yaptığım bi' uygulama bazı bilgisayarlarda başka hiç bir mesaj olmadan "uygulama çalışmayı durdurdu" hatası veriyor. Maksadım bunun nedenini anlamak çünkü çoğunlukta çalışırken azınlık olarak böyle bir hata vermesi can sıkıcı. Kullanıcı tarafında hatayı anlamak kolay olmuyor.
Her mekanizmada try catch yapısı kullanmak mantıklı. Bunu javascript te bolca kullansam da C# uygulamamda bu pek fazla yok diyebilirim.
Keşke mevcut uygulamaya birşey ekleyebilsem ve bana nerede hata verdiğini gösterse. Böyle birşey lazım. Bu benim için çabuk ve kolay bir çözüm olurdu.
Ne kadar büyük bir program hocam ? Eğer çok büyük Değilse boş bir günde ya da bir gününü ayırıp hata fırlayacak yerleri try- catch içine alabilirsin.
Bir otomasyon yazmıştım 10+k kod var yazarken nerede hata fırlattıysa direkt orada exception handling ekledim öyle öyle tamamlanıyor , senin yazma aşaman bittiği için zaman ayırıp düzeltmek bir yöntem
diğer yöntemse yazılanlar gibi log tutup , patladığı yere direkt kod tarafına erişmek
-
RockZs bunu yazdı
Çok teşekkürler. Log tutmak önemli.
Yaptığım bi' uygulama bazı bilgisayarlarda başka hiç bir mesaj olmadan "uygulama çalışmayı durdurdu" hatası veriyor. Maksadım bunun nedenini anlamak çünkü çoğunlukta çalışırken azınlık olarak böyle bir hata vermesi can sıkıcı. Kullanıcı tarafında hatayı anlamak kolay olmuyor.
Her mekanizmada try catch yapısı kullanmak mantıklı. Bunu javascript te bolca kullansam da C# uygulamamda bu pek fazla yok diyebilirim.
Keşke mevcut uygulamaya birşey ekleyebilsem ve bana nerede hata verdiğini gösterse. Böyle birşey lazım. Bu benim için çabuk ve kolay bir çözüm olurdu.
.net framework güncel mi o pc de yada sen hangi framework te yazıyon bundan dolayıda olmuş olabilir.
-
KaptaN bunu yazdıRockZs bunu yazdı
Çok teşekkürler. Log tutmak önemli.
Yaptığım bi' uygulama bazı bilgisayarlarda başka hiç bir mesaj olmadan "uygulama çalışmayı durdurdu" hatası veriyor. Maksadım bunun nedenini anlamak çünkü çoğunlukta çalışırken azınlık olarak böyle bir hata vermesi can sıkıcı. Kullanıcı tarafında hatayı anlamak kolay olmuyor.
Her mekanizmada try catch yapısı kullanmak mantıklı. Bunu javascript te bolca kullansam da C# uygulamamda bu pek fazla yok diyebilirim.
Keşke mevcut uygulamaya birşey ekleyebilsem ve bana nerede hata verdiğini gösterse. Böyle birşey lazım. Bu benim için çabuk ve kolay bir çözüm olurdu.
.net framework güncel mi o pc de yada sen hangi framework te yazıyon bundan dolayıda olmuş olabilir.
.net framework sürümünü mutlaka uygulama başlarken kontrol ettirmem gerek sanırım [kaynak: https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed].
ben .NET Framework 4.5.2 kullanıyorum. readme de gereksinimler kısmında ".NET Framework 4.5.2 (or higher)." olarak belirttim ama kullanıcıların kendi .net versiyonlarını bilmeleri/öğrenmeleri pek kolay olmayabilir.
not aldım, teşekkürler.
-
Loglama işlemleri için NLog kütüphanesini kullabilirsin.
Her metoda try catch eklemek yerine proje genelinde exception handling yazabilir burdada log etc. işlemlerini yaptırabilirsin.
Alttaki linkte anlatmışlar.
-
Tüm öneriler için çok teşekkür ederim. Önerilerden birini ya da başka bir yol kullanırsam burada ÇÖZÜLDÜ olarak belirtip ne yaptığımı da yazarım. Bu arada uygulamamdaki sorun işleme girecek olan değerin boş/tanımsız gelmesiymiş, yani bir try-catch koysaydım muhtemelen sorunu kendisi pat diye verecekti.
Sevgiler.
-
Uzun bir aradan sonra kullanıdığım çözümü yazmak istedim (ama konu böylelikle aktif konularda en üste çıktı, verdiğim rahatsızlık için özür).
try-catch ile sorunu çözdüm. Matematiksel işlemlerde ya da hata vermesi olası yerlerde try-cacth yapısı kullanıyor, hata oluşması durumunda logluyorum.
Bu yapıyı uygulama geneline de uygulayabilirsiniz, yukarıda bahsedildiği gibi fakat o zaman tespiti biraz daha sıkıntılı olabilir.
Herkese tekrar teşekkürler.
(Başlığı belli bir süre geçtikten sonra düzeltemiyoruz, dolayısıyla ÇÖZÜLDÜ olarak düzeltemedim).
EK: hataları bir cloud serviste depolamak ve incelemek de faydalı. bunun için sentry.io ya da loggly gibi servisler kullanılabilir.
RockZs tarafından 30/Nis/20 14:45 tarihinde düzenlenmiştir