{"id":8624,"date":"2011-01-05T23:55:00","date_gmt":"2011-01-05T21:55:00","guid":{"rendered":"https:\/\/fatihboy.com\/post\/csharp-ile-bir-islemin-mini-dokumunu-almak"},"modified":"2011-01-05T23:55:00","modified_gmt":"2011-01-05T21:55:00","slug":"csharp-ile-bir-islemin-mini-dokumunu-almak","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/csharp-ile-bir-islemin-mini-dokumunu-almak\/","title":{"rendered":"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak"},"content":{"rendered":"<p>&nbsp;&nbsp; G\u00fcn\u00fcm\u00fcz uygulamalar\u0131n\u0131n m\u00fc\u015fteri beklentileri do\u011frultusunda giderek karma\u015f\u0131kla\u015fmas\u0131, kimi zaman uygulama mod\u00fcllerine birden \u00e7ok yaz\u0131l\u0131m geli\u015ftiricinin elinin de\u011fmesi &#8211;<em>\u00f6zellikle de belirli bir metodolojiyi\/standard\u0131 takip etmeyen yaz\u0131l\u0131m evlerinde<\/em>&#8211; ortaya tam bir spagetti kod \u00e7\u0131kartabilmekte. B\u00f6ylesi kar\u0131\u015f\u0131k uygulamalarda m\u00fc\u015fteri aya\u011f\u0131nda olu\u015fabilen hatalar\u0131n ise debug edilmesi ba\u015fl\u0131 ba\u015f\u0131na bir problem haline gelmekte. <a href=\"\/en\/?p=8572\" target=\"_blank\" rel=\"noopener noreferrer\">\u00d6nceki makalemde<\/a> sizlerle Log4Net kullanarak bu hata ay\u0131klama s\u00fcrecini nas\u0131l daha az sanc\u0131l\u0131 hale getirebilece\u011finizi payla\u015fm\u0131\u015ft\u0131m; fakat al\u0131nan baz\u0131 hatalarda maalesef ki, o ya da bu sebeple, tutulan g\u00fcnl\u00fcklerdeki bilgiler bile hatan\u0131n kayna\u011f\u0131n\u0131 tespit etmekte yetersiz kalabilmekte. \u0130\u015fte tam da bu noktada yaz\u0131l\u0131m geli\u015ftiricilerin en b\u00fcy\u00fck arzusu m\u00fc\u015fteride olu\u015fan hata durumunun ayn\u0131s\u0131n\u0131 geli\u015ftirme\/test ortam\u0131na ta\u015f\u0131yarak detayl\u0131 bir debug yapabilmek. Bunun nas\u0131l m\u00fcmk\u00fcn olabilece\u011fini sizlerle payla\u015fmak istedi\u011fim yaz\u0131lar\u0131mdan bu ilkinde, sizlerle \u00f6ncelikli olarak m\u00fc\u015fteride olu\u015fan hatal\u0131 durumun bir kopyas\u0131n\u0131 nas\u0131l alabilece\u011finizi payla\u015f\u0131yor olaca\u011f\u0131m.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; M\u00fc\u015fterideki hatal\u0131 durumu bire bir geli\u015ftirme ya da test ortam\u0131na ta\u015f\u0131m\u0131n\u0131n yolu uygulaman\u0131n o s\u0131radaki anl\u0131k verilerini, haf\u0131zada kaplad\u0131\u011f\u0131 alan\u0131 kopyalayabilmekten ge\u00e7mekte. Bu noktada da yaz\u0131l\u0131m geli\u015ftiricilerin en b\u00fcy\u00fck yard\u0131mc\u0131s\u0131 uygulama d\u00f6k\u00fcm (<strong>dump<\/strong>) dosyalar\u0131d\u0131r. Uygulaman\u0131n haf\u0131zada bulunan verilerinin, \u00e7a\u011f\u0131r\u0131m hiyerar\u015fisinin, uygulama threadlerinin o onda bulundu\u011fu durumun v.s. bir kopyas\u0131n\u0131n bulundu\u011fu dump dosyalar\u0131 <strong>tam kullan\u0131c\u0131 d\u00f6k\u00fcm\u00fc<\/strong> (full user dump) ve <strong>mini d\u00f6k\u00fcm<\/strong> (mini dump) olmak \u00fczere iki gruba ayr\u0131labilir. Her iki grupta da uygulaman\u0131n o s\u0131rada haf\u0131zada yer alan de\u011ferleri bulunmakta ve \u00e7e\u015fitli ara\u00e7lar yard\u0131m\u0131yla bu veriler i\u00e7erisinde gezinerek hatan\u0131n sebebi bulunabilmekte. \u0130ki d\u00f6k\u00fcm aras\u0131ndaki temel fark ise tam kullan\u0131c\u0131 d\u00f6k\u00fcm\u00fcnde sadece uygulaman\u0131n haf\u0131zada kaplad\u0131\u011f\u0131 alan de\u011fil, kullan\u0131c\u0131n\u0131n kulland\u0131\u011f\u0131 t\u00fcm haf\u0131za alan\u0131n\u0131n d\u00f6k\u00fcm\u00fcn\u00fcn al\u0131n\u0131yor olmas\u0131d\u0131r. \u00d6zellikle haf\u0131za kullan\u0131m\u0131n\u0131n yaz\u0131l\u0131m geli\u015ftiriciye teslim edildi\u011fi native kodlar ile geli\u015ftirilmi\u015f olan uygulamalarda verilerin zaman zaman uygulaman\u0131n kaplad\u0131\u011f\u0131 alan d\u0131\u015f\u0131nda da bulunabiliyor olmas\u0131 ya da farkl\u0131 uygulamalarla etkile\u015fim i\u00e7inde olmas\u0131 nedeniyle ihtiya\u00e7 duyulan tam kullan\u0131c\u0131 d\u00f6k\u00fcmleri do\u011falar\u0131 gere\u011fi sistemin kulland\u0131\u011f\u0131 haf\u0131zayla do\u011fru orant\u0131l\u0131 olarak hem fazla alan kaplamakta, hem de ilgilendi\u011fimiz nokta d\u0131\u015f\u0131nda da \u00e7ok fazla gereksiz veri bar\u0131nd\u0131rabilmektedir. Bu sebeple hata incelemesi i\u00e7in ilk tercih olarak mini d\u00f6k\u00fcmler se\u00e7ilmekte ve pek \u00e7ok durumda da hatan\u0131n kayna\u011f\u0131na ula\u015fmakta yeterli olmaktad\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Mini d\u00f6k\u00fcmler ile tam kullan\u0131c\u0131 d\u00f6k\u00fcmleri aras\u0131ndaki se\u00e7imde \u00f6nemli olacak bir ba\u015fka nokta ise; tam kullan\u0131c\u0131 d\u00f6k\u00fcmleri i\u00e7in Dr. Watson, Userdump, ADPlus gibi Microsoft taraf\u0131ndan sunulan uygulamalar d\u0131\u015f\u0131nda biz yaz\u0131l\u0131m geli\u015ftiricilere a\u00e7\u0131lm\u0131\u015f bir API&#8217;si bulunmamas\u0131na kar\u015f\u0131n, mini d\u00f6k\u00fcmler i\u00e7in sa\u011flanan API&#8217;ler bulunmakta. Dolay\u0131s\u0131yla da mini d\u00f6k\u00fcmlerin programsal olarak al\u0131nabilmesi m\u00fcmk\u00fcn olmakta. Yaz\u0131m\u0131n devam\u0131nda bu noktaya odaklanarak bizlere sunulan API&#8217;leri kullanarak bir C# uygulamas\u0131 i\u00e7erisinden nas\u0131l mini d\u00f6k\u00fcm al\u0131nabilece\u011finizi anlat\u0131yor olaca\u011f\u0131m.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/MiniDump.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/MiniDump_thumb.png\" alt=\"Mini Dump uygulamas\u0131 ana ekran\u0131\" \/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131da bir ekran g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc bulabilece\u011finiz ve sizlerle payla\u015faca\u011f\u0131m uygulamam, haf\u0131zada bulunan s\u00fcre\u00e7leri\/yans\u0131malar\u0131 (process) bizlere listeleyerek hangisinin mini d\u00f6k\u00fcm\u00fcn\u00fcn al\u0131nmas\u0131 istendi\u011fini sormakta. Kullan\u0131c\u0131n\u0131n se\u00e7imi do\u011frultusunda Windows&#8217;un API&#8217;lerini de kullanarak bir mini d\u00f6k\u00fcm dosyas\u0131 olu\u015fturmakta. Yaz\u0131m\u0131n sonlar\u0131nda uygulaman\u0131n kodlar\u0131n\u0131 kullanarak kendi uygulaman\u0131za nas\u0131l adapte edece\u011finizde ve hata durumlar\u0131nda bu i\u015flemin otomatik olarak nas\u0131l yap\u0131labilece\u011finden de bahsediyor olaca\u011f\u0131m.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Programsal olarak mini d\u00f6k\u00fcm almak istiyorsan\u0131z yukar\u0131da bahsetti\u011fim \u00fczere Windows API&#8217;leri ile muhatap olacaks\u0131n\u0131z, dolay\u0131s\u0131yla \u00f6ncelikli olarak C# i\u00e7erisinde bu API&#8217;leri nas\u0131l kullanabilece\u011fimizi g\u00f6relim. Managed kod \u00fczerinde geli\u015ftirilen C# uygulamalar\u0131, bizim senaryomuzda da oldu\u011fu gibi, zaman zaman unmanaged k\u00fct\u00fcphanelerle etkile\u015fime ge\u00e7mek zorunda kalabilmekte. Bu gibi senaryolarda managed kod \u00fczerinden unmanaged uygulamalar\u0131 kullanabilmek i\u00e7in C# i\u00e7erisinde <strong>extern<\/strong> anahtar kelimesi&nbsp; ve <em>System.Runtime.InteropServices<\/em> namespace&#8217;i alt\u0131nda <b>DllImport<\/b> \u00f6zniteli\u011fi bulunmaktad\u0131r. DllImport \u00f6zniteli\u011fi kullan\u0131l\u0131rken \u00f6ncelikle kullanaca\u011f\u0131n\u0131z harici fonksiyonu imzas\u0131n\u0131 (<em>d\u00f6n\u00fc\u015f t\u00fcr\u00fcn\u00fc, ad\u0131n\u0131 ve parametrelerini<\/em>) belirtmelisiniz, ard\u0131ndan da bu imzan\u0131n \u00fczerinden kullanaca\u011f\u0131n\u0131z DllImport \u00f6zniteli\u011fi ile verdi\u011finiz bu fonksiyonun hangi unmanaged dll i\u00e7erisinde ve ne isimle bulunabilece\u011fini belirtmelisiniz. Bu \u015fekilde haz\u0131rlanarak derlenen bir kod, derleyici taraf\u0131ndan yorumlanarak ilgili yerde do\u011fru dll&#8217;in ve fonksiyonun bizim ad\u0131m\u0131za \u00e7a\u011f\u0131r\u0131lmas\u0131 sa\u011flanmaktad\u0131r. A\u015fa\u011f\u0131da \u00f6rnekledi\u011fim kullan\u0131mda C++ ile yaz\u0131lm\u0131\u015f olan Ornek.dll i\u00e7erisinde yer alan ornekFonksiyon&#8217;unu C# kodunuz i\u00e7erisinde nas\u0131l kullanabilece\u011finizi g\u00f6rebilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[DllImport(\"Ornek.dll\", EntryPoint=\"ornekFonksiyon\")]\nstatic extern int ornekFonksiyon(int parametre1,int parametre2, ...);<\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Kodumuz i\u00e7erisinde yukar\u0131daki \u015fekilde at\u0131fta bulundu\u011fumuz fonksiyonun hangi dll i\u00e7erisindeki hangi isimle yer ald\u0131\u011f\u0131n\u0131 belirterek art\u0131k kullan\u0131ma haz\u0131r hale getirmi\u015f oluyoruz. Bu noktadan sonra kodumuz i\u00e7erisinde ayn\u0131 C# ile yaz\u0131lm\u0131\u015f standart bir static fonksiyon kullan\u0131r gibi kullanabiliriz. Bu konuda d\u00fc\u015f\u00fclmesi gereken \u00f6nemli bir not; C\/C++ gibi dillerle yaz\u0131lm\u0131\u015f unmanaged dll i\u00e7erisindeki t\u00fcm fonksiyonlar bu \u015fekilde kullan\u0131lamaz. B\u00f6ylesi bir kullan\u0131m i\u00e7in \u00f6ncelikle ilgili k\u00fct\u00fcphane geli\u015ftiricisinin kodu i\u00e7erisinde b\u00f6ylesi bir kullan\u0131ma izin vermi\u015f olmas\u0131 gerekli. Ornek.dll \u00fczerinden \u00f6rne\u011fimize devam edecek olursak, ornekFonksiyon&#8217;un C# i\u00e7erisinden kullan\u0131labilir olmas\u0131 i\u00e7in C\/C++ kodunun a\u015fa\u011f\u0131daki \u015fekilde yaz\u0131lm\u0131\u015f olmas\u0131 gerekmekte;<\/p>\n\n\n\n<p>C++ Header dosyas\u0131;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">extern \"C\" {\n    __declspec(dllexport) void __cdecl ornekFonksiyon (int parametre1, int parametre2, ...);\n}<\/pre>\n\n\n\n<p>C++ dosyas\u0131;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">extern void __cdecl ornekFonksiyon (int parametre1, int parametre2, ...) {\n    \/\/ \u0130\u015f mant\u0131\u011f\u0131 kodu\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; G\u00f6r\u00fcld\u00fc\u011f\u00fc gibi C# i\u00e7erisinden unmanaged dll&#8217;ler i\u00e7erisindeki fonksiyonlar\u0131 \u00e7al\u0131\u015ft\u0131rmak olduk\u00e7a kolay. San\u0131r\u0131m DllImport \u00f6zniteli\u011fi ve extern anahtar kelimesi hakk\u0131nda verdi\u011fim bu kadar bilgi yaz\u0131m\u0131n geri kalan\u0131nda kullanaca\u011f\u0131m kodun anla\u015f\u0131lmas\u0131 i\u00e7in yeterli olacakt\u0131r. DllImport \u00f6zniteli\u011finin kullan\u0131m\u0131 hakk\u0131nda daha detayl\u0131 bilgi <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa984739(v=vs.71).aspx\" target=\"_blank\" rel=\"noopener noreferrer\">MSDN sitesinde<\/a> bulunabilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Mini d\u00f6k\u00fcm almakta kullanaca\u011f\u0131m\u0131z fonksiyon <strong>dbghelp.dll<\/strong> i\u00e7erisinde yer alan <strong>MiniDumpWriteDump<\/strong>&#8216;d\u0131r. Bu fonksiyon a\u015fa\u011f\u0131daki \u015fekilde bir imzaya sahiptir;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">BOOL WINAPI MiniDumpWriteDump(\n  __in  HANDLE hProcess,\n  __in  DWORD ProcessId,\n  __in  HANDLE hFile,\n  __in  MINIDUMP_TYPE DumpType,\n  __in  PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,\n  __in  PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,\n  __in  PMINIDUMP_CALLBACK_INFORMATION CallbackParam\n);<\/pre>\n\n\n\n<p>&nbsp;&nbsp; <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms680360(v=vs.85).aspx\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/msdn.microsoft.com\/en-us\/library\/ms680360%28v=vs.85%29.aspx<\/a> adresinde bulunan dok\u00fcmantasyondan parametreleri hakk\u0131nda fikir sahibi olabilece\u011finiz bu fonksiyonun bizim \u00f6rne\u011fimizde se\u00e7ilecek olan i\u015flemin bilgilerinin verildi\u011fi <em>hProcess<\/em> ve <em>ProcessId<\/em> parametreleri, d\u00f6k\u00fcm\u00fcn yaz\u0131laca\u011f\u0131 dosyan\u0131n belirtildi\u011fi <em>hFile<\/em> parametresi ve d\u00f6k\u00fcm t\u00fcr\u00fcn\u00fcn belirtilece\u011fi <em>DumpType<\/em> parametresi kullan\u0131lacakt\u0131r.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[DllImport(\"dbghelp.dll\",\n    EntryPoint = \"MiniDumpWriteDump\",\n    CallingConvention = CallingConvention.StdCall,\n    CharSet = CharSet.Unicode,\n    ExactSpelling = true,\n    SetLastError = true)]\nstatic extern bool MiniDumpWriteDump(IntPtr hProcess,\n    uint processId,\n    SafeHandle hFile,\n    uint dumpType,\n    IntPtr expParam,\n    IntPtr userStreamParam,\n    IntPtr callbackParam);<\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Kodumuz i\u00e7erisinde&nbsp; MiniDumpWriteDump fonksiyonu tan\u0131mlamas\u0131 yaparak asl\u0131nda i\u015fin \u00e7ok \u00f6nemli bir b\u00f6l\u00fcm\u00fcn\u00fc tamamlam\u0131\u015f oluyoruz \ud83d\ude42 bundan sonraki k\u0131s\u0131mda geriye kullan\u0131c\u0131ya i\u015flemlerin\/yans\u0131malar\u0131n listelenerek, se\u00e7ilen i\u015flem i\u00e7in bu fonksiyonun \u00e7a\u011f\u0131r\u0131lmas\u0131 kal\u0131yor. A\u015fa\u011f\u0131daki basit kod ile i\u015flemleri getirebilir ve islemListesi ad\u0131ndaki DataGridView i\u00e7erisinde listeleyebiliriz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">islemListesi.DataSource = Process.GetProcesses();<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Ekrana yerle\u015ftirece\u011fimiz bir buton ile kullan\u0131c\u0131n\u0131n i\u015flemi se\u00e7tikten sonra mini d\u00f6k\u00fcm olu\u015fturmas\u0131 i\u015fini tetikleyebiliriz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">private void dumpAl_Click(object sender, EventArgs e) {\n    var seciliIslem = (Process)islemListesi.SelectedRows[0].DataBoundItem;\n    var onerilenDosyaAdi = seciliIslem.ProcessName + \".mdmp\"; \n\n    dosyaSaklamaDiyalogu.FileName = onerilenDosyaAdi;\n    if (dosyaSaklamaDiyalogu.ShowDialog()== DialogResult.OK) {\n        using (var fs = new FileStream(dosyaSaklamaDiyalogu.FileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Write)) {\n            MiniDumpWriteDump(seciliIslem.Handle,\n                    (uint)seciliIslem.Id,\n                    fs.SafeFileHandle,\n                    0x00000002, \/\/MiniDumpWithFullMemory\n                    IntPtr.Zero,\n                    IntPtr.Zero,\n                    IntPtr.Zero);\n        }\n\n        MessageBox.Show(\"Mini Dump ba\u015far\u0131yla al\u0131nd\u0131\");\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Ekrandan yer alan dumpAl ad\u0131ndaki butonun click olay\u0131na ba\u011flanm\u0131\u015f olan&nbsp; dumpAl_Click fonksiyonu i\u00e7erisinde islemListesi&#8217;nde se\u00e7ili olan i\u015flem bulunarak bu i\u015flem ad\u0131yla bir dosya saklanmas\u0131 \u00fczere kullan\u0131c\u0131ya soruluyor, kullan\u0131c\u0131 isterse dosya ad\u0131n\u0131 de\u011fi\u015ftirebilmekte. Ard\u0131ndan girilen isim ve klas\u00f6rde bir FileStream olu\u015fturularak bu stream&#8217;in bilgisi, i\u015flem bilgileri ile birlikte MiniDumpWriteDump fonksiyonuna verilmekte. Bu noktadan sonra API i\u00e7erisinde gerekli i\u015flemler yap\u0131larak i\u015flemin hizmet d\u00f6k\u00fcm\u00fc belirtilen dosya i\u00e7erisine yaz\u0131lacakt\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde dikkat edecek olursan\u0131z mini d\u00f6k\u00fcm\u00fcm\u00fcz\u00fc&nbsp; tam haf\u0131za d\u00f6k\u00fcm\u00fc, <em>MiniDumpWithFullMemory<\/em>, ile almaktay\u0131z. D\u00f6k\u00fcm dosyas\u0131 i\u00e7erisine kaydedilecek olan verinin kapsam\u0131n\u0131 belirleyen ve <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms680519(v=VS.85).aspx\" target=\"_blank\" rel=\"noopener noreferrer\">MSDN sitesinde<\/a> daha detayl\u0131 bilgi bulabilece\u011finiz bu parametrede a\u015fa\u011f\u0131daki de\u011ferler kullan\u0131labilmektedir (<em>C++ notasyonu<\/em>);<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">typedef enum _MINIDUMP_TYPE {\n  MiniDumpNormal                           = 0x00000000,\n  MiniDumpWithDataSegs                     = 0x00000001,\n  MiniDumpWithFullMemory                   = 0x00000002,\n  MiniDumpWithHandleData                   = 0x00000004,\n  MiniDumpFilterMemory                     = 0x00000008,\n  MiniDumpScanMemory                       = 0x00000010,\n  MiniDumpWithUnloadedModules              = 0x00000020,\n  MiniDumpWithIndirectlyReferencedMemory   = 0x00000040,\n  MiniDumpFilterModulePaths                = 0x00000080,\n  MiniDumpWithProcessThreadData            = 0x00000100,\n  MiniDumpWithPrivateReadWriteMemory       = 0x00000200,\n  MiniDumpWithoutOptionalData              = 0x00000400,\n  MiniDumpWithFullMemoryInfo               = 0x00000800,\n  MiniDumpWithThreadInfo                   = 0x00001000,\n  MiniDumpWithCodeSegs                     = 0x00002000,\n  MiniDumpWithoutAuxiliaryState            = 0x00004000,\n  MiniDumpWithFullAuxiliaryState           = 0x00008000,\n  MiniDumpWithPrivateWriteCopyMemory       = 0x00010000,\n  MiniDumpIgnoreInaccessibleMemory         = 0x00020000,\n  MiniDumpWithTokenInformation             = 0x00040000\n} MINIDUMP_TYPE;<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde verilen tam haf\u0131za d\u00f6k\u00fcm\u00fc de\u011feri (0x00000002), i\u015flemin eri\u015fti\u011fi t\u00fcm haf\u0131za bilgisini d\u00f6k\u00fcm dosyas\u0131na ekleyece\u011fi i\u00e7in dosyan\u0131n b\u00fcy\u00fckl\u00fc\u011f\u00fcn\u00fc artt\u0131racakt\u0131r. \u0130\u015f mant\u0131\u011f\u0131n\u0131za uygun olarak&nbsp; yukar\u0131da s\u0131ralad\u0131\u011f\u0131m de\u011ferlerden bir ba\u015fkas\u0131n\u0131n kullan\u0131lmas\u0131 da m\u00fcmk\u00fcnd\u00fcr.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u015eimdiye kadar sizlerle payla\u015ft\u0131\u011f\u0131m bilgileri kullanarak rahatl\u0131kla aktif i\u015flemlerden istedi\u011finizin d\u00f6k\u00fcm\u00fcn\u00fc alarak bir dosyaya kaydetmeniz m\u00fcmk\u00fcn. \u0130sterseniz bu bilgileri kullanarak ger\u00e7ek hayatta m\u00fc\u015fterilerimize sundu\u011fumuz uygulamalar\u0131m\u0131za nas\u0131l entegre ederek daha yaral\u0131 hale getirebilece\u011fimizi g\u00f6relim. A\u015fa\u011f\u0131daki \u00f6rnek kodumuzda harici bir uygulaman\u0131n mini d\u00f6k\u00fcm\u00fcn\u00fc almak yerine \u00e7al\u0131\u015fan uygulamam\u0131z\u0131n bir hata ile kar\u015f\u0131la\u015fmas\u0131 durumunda kendi hata d\u00f6k\u00fcm\u00fcn\u00fc almas\u0131n\u0131 sa\u011fl\u0131yoruz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[STAThread]\nstatic void Main() {\n    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;\n\n    \/\/uygulama normal \u015fekilde ba\u015flat\u0131l\u0131r...\n    Application.EnableVisualStyles();\n    Application.SetCompatibleTextRenderingDefault(false);\n    Application.Run(new AnaEkran());\n}\n\n\/\/ ...\n\/\/di\u011fer i\u015f mant\u0131\u011f\u0131 kodlar\u0131\n\/\/ ...\n\nprivate static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {\n   \/\/Kullan\u0131c\u0131 uygulamada bir hata oldu\u011fu konusunda\n   \/\/hata mesaj\u0131 ile birlikte bilgilendirilir.\n\n   \/\/Hata d\u00f6k\u00fcm\u00fcn\u00fcn al\u0131n\u0131p al\u0131nmamas\u0131 sorulur\n\n   var aktifIslem = Process.GetCurrentProcess();\n\n   var onerilenDosyaAdi = aktifIslem.ProcessName + \".mdmp\";\n   if (dosyaSaklamaDiyalogu.ShowDialog() == DialogResult.OK) {\n        using (var fs = new FileStream(dosyaSaklamaDiyalogu.FileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Write)) {\n            MiniDumpWriteDump(aktifIslem.Handle,\n                    (uint)aktifIslem.Id,\n                    fs.SafeFileHandle,\n                    0x00000002, \/\/MiniDumpWithFullMemory\n                    IntPtr.Zero,\n                    IntPtr.Zero,\n                    IntPtr.Zero);\n        }\n\n        \/\/bu nokyada olu\u015fan hata d\u00f6k\u00fcm\u00fc istenirse bir\n        \/\/web servise g\u00f6nderilebilir...\n\n        MessageBox.Show(\"Hata bilgisi ba\u015far\u0131yla sakland\u0131\");\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Not; bu \u00f6rne\u011fin debug modunda derleyerek \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z CurrentDomain_UnhandledException fonksiyonu i\u00e7erisine d\u00fc\u015fmedi\u011fini g\u00f6receksiniz. Bunun nedeni hata al\u0131nmas\u0131 durumunda varsay\u0131lan olarak hatan\u0131n .Net Framework taraf\u0131ndan yakalanarak &#8220;<em>Unhandled Exception<\/em>&#8221; diyalogunda hata bilgisinin verilmesidir. Bu diyalogun \u00e7\u0131kmas\u0131n\u0131 engelleyerek i\u015fleyi\u015fin fonksiyonumuz i\u00e7erisinde devam etmesini istiyorsan\u0131z, uygulaman\u0131z\u0131n ba\u015f\u0131na a\u015fa\u011f\u0131daki kodu koyarak hatalar\u0131n yakalanarak bu diyalog i\u00e7erisinde g\u00f6sterilmesini engelleyebilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bir ikinci not; \u00f6rnek uygulamam\u0131z <strong>UnhandledException<\/strong>&#8216;\u0131 dinlemesi nedeniyle sadece aray\u00fcz threadleri d\u0131\u015f\u0131nda olu\u015fan thread&#8217;lerdeki hatalarda hata d\u00f6k\u00fcm\u00fc alacakt\u0131r. Aray\u00fcz thread&#8217;lerinde olu\u015fan hatalarda da hata d\u00f6k\u00fcm\u00fc al\u0131nmas\u0131 i\u00e7in benzer bir i\u015flemin <strong>ThreadException<\/strong> olay\u0131 dinlenerek de yap\u0131l\u0131yor olmas\u0131 gerekli.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Programsal olarak mini d\u00f6k\u00fcm dosyas\u0131 olu\u015fturulmas\u0131n\u0131 ba\u015fard\u0131ktan sonra i\u015flerimiz olduk\u00e7a kolayla\u015facakt\u0131r. M\u00fc\u015fteride olu\u015fan hatalarda otomatik hizmet d\u00f6k\u00fcm\u00fc alarak bu dosyan\u0131n g\u00f6nderilmesi talep edebilir, \u00fczerinden analiz yapabilirsiniz. Bir ad\u0131m \u00f6teye giderek al\u0131nan hizmet d\u00f6k\u00fcmlerini bir web servisi \u00fczerinden firman\u0131z sunucular\u0131na aktarabilir, hatta ilgili yaz\u0131l\u0131m geli\u015ftiriciye konu hakk\u0131nda bilgilendirici bir mail g\u00f6nderebilirsiniz. Firman\u0131zda Team Foundation&nbsp; Server kullan\u0131yorsan\u0131z, s\u00fcreci iyice otomatikle\u015ftirerek mail g\u00f6ndermek yerine geli\u015ftirme ekibine dosyay\u0131 da ili\u015ftirerek bir task atayabilirsiniz. B\u00f6ylelikle hata yakalamakla kalmay\u0131p m\u00fc\u015fterinin tek tu\u015fu basmas\u0131yla bilgiyi firman\u0131zdaki i\u015f s\u00fcre\u00e7lerine dahil edebilirsiniz.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; Makalemle ufkunuzu a\u00e7mada bir nebze olsun katk\u0131da bulunabildi\u011fimi umuyorum. E\u011fer bu makalemde payla\u015ft\u0131\u011f\u0131m bilgiler ho\u015funuza gittiyse serinin bir sonraki makalesini kesinlikle ka\u00e7\u0131rmay\u0131n derim \ud83d\ude09 Sonraki makalemde sizlerle Visual Studio 2010 ile birlikte gelen ve hata d\u00f6k\u00fcm dosyalar\u0131n\u0131 analiz ederek hatalar\u0131n\u0131z\u0131 bulman\u0131z\u0131 sa\u011flayan yeni \u00f6zelliklerden bahsediyor olaca\u011f\u0131m.<\/p>\n\n\n\n<p>&nbsp;&nbsp; A\u015fa\u011f\u0131da linkini bulabilece\u011finiz \u00f6rnek solution\u2019da i\u015flem d\u00f6k\u00fcm\u00fcn\u00fc alabilece\u011finiz kodlar\u0131n bulundu\u011fu \u0130slemDokumu projesi ile hatay a\u00e7\u0131k \u015fekilde kodlanm\u0131\u015f CRMUygulamasi projesini bulabilirsiniz. CRM uygulamas\u0131 ba\u015flat\u0131ld\u0131\u011f\u0131nda herhangi bir de\u011fer girilmeden kaydet butonuna bas\u0131ld\u0131\u011f\u0131nda hata olu\u015facakt\u0131r, bu uygulama devam eden makalelerde hatalar\u0131n debug edilmesi s\u0131ras\u0131nda \u00f6rnek olarak kullan\u0131lacakt\u0131r.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"32\" height=\"32\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/Archive.png\" alt=\"alt\" class=\"wp-image-8633\" srcset=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/Archive.png 32w, https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/Archive-12x12.png 12w\" sizes=\"auto, (max-width: 32px) 100vw, 32px\" \/><\/figure><\/div>\n\n\n\n<p><a href=\"https:\/\/fatihboy.com\/en\/post\/csharp-ile-bir-islemin-mini-dokumunu-almak\/hataayiklama\/\" rel=\"attachment wp-att-8632\">Hata Ay\u0131klama \u00d6rnek Uygulamas\u0131<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; G\u00fcn\u00fcm\u00fcz uygulamalar\u0131n\u0131n m\u00fc\u015fteri beklentileri do\u011frultusunda giderek karma\u015f\u0131kla\u015fmas\u0131, kimi zaman uygulama mod\u00fcllerine birden \u00e7ok yaz\u0131l\u0131m geli\u015ftiricinin elinin de\u011fmesi &#8211;\u00f6zellikle de belirli bir metodolojiyi\/standard\u0131 takip etmeyen yaz\u0131l\u0131m evlerinde&#8211; ortaya tam bir spagetti kod \u00e7\u0131kartabilmekte. B\u00f6ylesi kar\u0131\u015f\u0131k uygulamalarda m\u00fc\u015fteri aya\u011f\u0131nda olu\u015fabilen hatalar\u0131n ise debug edilmesi ba\u015fl\u0131 ba\u015f\u0131na bir problem haline gelmekte. \u00d6nceki makalemde sizlerle Log4Net kullanarak bu&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/csharp-ile-bir-islemin-mini-dokumunu-almak\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":8629,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[118],"class_list":["post-8624","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-csharp","category-turkce","tag-hata-ayiklama"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak - Fatih Boy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/csharp-ile-bir-islemin-mini-dokumunu-almak\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp; G\u00fcn\u00fcm\u00fcz uygulamalar\u0131n\u0131n m\u00fc\u015fteri beklentileri do\u011frultusunda giderek karma\u015f\u0131kla\u015fmas\u0131, kimi zaman uygulama mod\u00fcllerine birden \u00e7ok yaz\u0131l\u0131m geli\u015ftiricinin elinin de\u011fmesi &#8211;\u00f6zellikle de belirli bir metodolojiyi\/standard\u0131 takip etmeyen yaz\u0131l\u0131m evlerinde&#8211; ortaya tam bir spagetti kod \u00e7\u0131kartabilmekte. B\u00f6ylesi kar\u0131\u015f\u0131k uygulamalarda m\u00fc\u015fteri aya\u011f\u0131nda olu\u015fabilen hatalar\u0131n ise debug edilmesi ba\u015fl\u0131 ba\u015f\u0131na bir problem haline gelmekte. \u00d6nceki makalemde sizlerle Log4Net kullanarak bu...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/csharp-ile-bir-islemin-mini-dokumunu-almak\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2011-01-05T21:55:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png\" \/>\n\t<meta property=\"og:image:width\" content=\"209\" \/>\n\t<meta property=\"og:image:height\" content=\"208\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak\",\"datePublished\":\"2011-01-05T21:55:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/\"},\"wordCount\":2060,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png\",\"keywords\":[\"Hata Ayiklama\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/\",\"url\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/\",\"name\":\"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png\",\"datePublished\":\"2011-01-05T21:55:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png\",\"width\":209,\"height\":208},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak - Fatih Boy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihboy.com\/en\/csharp-ile-bir-islemin-mini-dokumunu-almak\/","og_locale":"en_US","og_type":"article","og_title":"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak - Fatih Boy","og_description":"&nbsp;&nbsp; G\u00fcn\u00fcm\u00fcz uygulamalar\u0131n\u0131n m\u00fc\u015fteri beklentileri do\u011frultusunda giderek karma\u015f\u0131kla\u015fmas\u0131, kimi zaman uygulama mod\u00fcllerine birden \u00e7ok yaz\u0131l\u0131m geli\u015ftiricinin elinin de\u011fmesi &#8211;\u00f6zellikle de belirli bir metodolojiyi\/standard\u0131 takip etmeyen yaz\u0131l\u0131m evlerinde&#8211; ortaya tam bir spagetti kod \u00e7\u0131kartabilmekte. B\u00f6ylesi kar\u0131\u015f\u0131k uygulamalarda m\u00fc\u015fteri aya\u011f\u0131nda olu\u015fabilen hatalar\u0131n ise debug edilmesi ba\u015fl\u0131 ba\u015f\u0131na bir problem haline gelmekte. \u00d6nceki makalemde sizlerle Log4Net kullanarak bu...Read More","og_url":"https:\/\/fatihboy.com\/en\/csharp-ile-bir-islemin-mini-dokumunu-almak\/","og_site_name":"Fatih Boy","article_published_time":"2011-01-05T21:55:00+00:00","og_image":[{"width":209,"height":208,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png","type":"image\/png"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak","datePublished":"2011-01-05T21:55:00+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/"},"wordCount":2060,"commentCount":1,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png","keywords":["Hata Ayiklama"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/","url":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/","name":"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png","datePublished":"2011-01-05T21:55:00+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2011\/01\/tools_thumb.png","width":209,"height":208},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/csharp-ile-bir-islemin-mini-dokumunu-almak\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"C# ile Bir \u0130\u015flemin Mini D\u00f6k\u00fcm\u00fcn\u00fc Almak"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/8624","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=8624"}],"version-history":[{"count":0,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/8624\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/8629"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=8624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=8624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=8624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}