{"id":12483,"date":"2010-04-20T20:02:29","date_gmt":"2010-04-20T18:02:29","guid":{"rendered":"\/post\/Dinamik-Olusturulan-Kodlara-Debug-Bilgisi-Eklemek.aspx"},"modified":"2021-06-14T18:35:36","modified_gmt":"2021-06-14T15:35:36","slug":"dinamik-olusturulan-kodlara-debug-bilgisi-eklemek","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/","title":{"rendered":"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek"},"content":{"rendered":"<p>Daha \u00f6nce yazd\u0131\u011f\u0131m makalemde sizlere <a href=\"\/en\/?p=29\">\u00e7al\u0131\u015fma-zaman\u0131 dinamik kod olu\u015fturma<\/a>y\u0131 anlatm\u0131\u015ft\u0131m. Yaz\u0131m ard\u0131ndan ald\u0131\u011f\u0131m baz\u0131 maillerde bu y\u00f6ntemi kullanmaya ba\u015flad\u0131ktan sonra ikinci bir ihtiyac\u0131n olu\u015ftu\u011funu g\u00f6rd\u00fcm; olu\u015fturulan dinamik kodun Debug edilebilmesi. Okuyaca\u011f\u0131n\u0131z yaz\u0131mda bu konuyu ele alarak dinamik kod olu\u015fturma s\u00fcrecinde yapaca\u011f\u0131n\u0131z ek kodlama ile nas\u0131l debug edilebilir bir kod olu\u015fturabilece\u011finizi g\u00f6stermeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n\n\n\n<p>\u00d6ncelikle bir \u00f6nceki makalemde ele ald\u0131\u011f\u0131m ve dinamik olu\u015fturulan nihayi kodu hat\u0131rlayal\u0131m;<\/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=\"\">public class DinamikSinif {\n    public static void Main(string[] parametreler) {\n        Console.WriteLine(\"Merhaba Dinamik D\u00fcnya\");\n    }\n}<\/pre>\n\n\n\n<p>Basit bir s\u0131n\u0131f tan\u0131mlamas\u0131, i\u00e7erisinde yer alan Main metodunda sadece \u201cMerhaba Dinamik D\u00fcnya\u201d yazd\u0131rd\u0131\u011f\u0131m\u0131z bu konsol uygulamas\u0131n\u0131 a\u015fa\u011f\u0131daki kodu kullanarak \u00fcretebilmi\u015ftik;<\/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=\"\">using System;\nusing System.Reflection;\nusing System.Reflection.Emit;\nusing System.Threading;\nusing System.Diagnostics;\n\nnamespace ReflectionEmitOrnegi {\n    class Program {\n        static void Main(string[] args)  {\n            var assemblyAdi = new AssemblyName(\"MerhabaDinamikDunya\");\n            var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyAdi, AssemblyBuilderAccess.RunAndSave);\n            var modul = assemblyBuilder.DefineDynamicModule(\"MerhabaDinamikDunya.exe\");\n\n            var typeBuilder = modul.DefineType(\"DinamikSinif\", TypeAttributes.Public | TypeAttributes.Class);\n\n            var metodbuilder = typeBuilder.DefineMethod(\"Main\",\n                MethodAttributes.HideBySig | MethodAttributes.Static | MethodAttributes.Public,\n                typeof(void),\n                new Type[] { typeof(string[]) });\n\n            var ilOlusturucu = metodbuilder.GetILGenerator();\n\n            \/\/ilOlusturucu.Emit(OpCodes.Ldstr, \"Merhaba Dinamik D\u00fcnya\");\n            \/\/ilOlusturucu.Emit(OpCodes.Call, typeof(Console).GetMethod(\"WriteLine\", new Type[] { typeof(string) }));\n            ilOlusturucu.EmitWriteLine(\"Merhaba Dinamik D\u00fcnya\");\n\n            ilOlusturucu.Emit(OpCodes.Ret);\n\n            typeBuilder.CreateType();\n\n            assemblyBuilder.SetEntryPoint(metodbuilder, PEFileKinds.ConsoleApplication);\n            assemblyBuilder.Save(\"MerhabaDinamikDunya.exe\");\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u0130\u00e7inde bulundu\u011fumuz domain i\u00e7erisinde (AppDomain.CurrentDomain) yeni bir dinamik assembly tan\u0131mlayarak i\u00e7inde olu\u015fturdu\u011fumuz mod\u00fcle s\u0131n\u0131f\u0131m\u0131z\u0131 ve metodumuzu eklemi\u015f, dosya sistemine kaydetmi\u015ftik.<\/p>\n\n\n\n<p>Dinamik olu\u015fturdu\u011fumuz bu kodu isterseniz a\u015fa\u011f\u0131daki \u015fekilde saklamadan \u00f6nce\/sonra program\u0131n\u0131z i\u00e7erisinde kullanabilirsiniz;<\/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=\"\">var dinamikSinifType = typeBuilder.CreateType();\ndinamikSinifType.GetMethod(\"Main\").Invoke(null, new string[] { null });<\/pre>\n\n\n\n<p>Bu noktada, kimi zaman olu\u015fan kodla ilgili problem ya\u015fayabilirsiniz; acaba \u00fcretilen kod istedi\u011finiz \u015fekilde mi \u00fcretildi? \u00dcretilen kod i\u00e7erisinde bir noktada hatal\u0131 bir kullan\u0131m m\u0131 var? \u00dcretti\u011fim kod zaman zaman hata f\u0131rlatmakta, neden?<\/p>\n\n\n\n<p>Bu problemleri a\u015fabilmek i\u00e7in kimi zaman saatlerce\/g\u00fcnlerce u\u011fra\u015fman\u0131z gerekebilir, problemin kayna\u011f\u0131n\u0131 bulamad\u0131\u011f\u0131n\u0131z zamanlar dahi olabilir. Ke\u015fke bu kodu Visual Studio i\u00e7erisinde yazd\u0131\u011f\u0131n\u0131z di\u011fer kodlar gibi debug edebilsediniz, programda ileri-geri gidip de\u011fi\u015fkenlerin de\u011ferlerini g\u00f6r\u00fcp de\u011fi\u015ftirebilseydiniz. E\u011fer bunlar\u0131 d\u00fc\u015f\u00fcn\u00fcyor ve istiyorsan\u0131z, size iyi bir haberim var; System.Reflection.Emit i\u00e7erisinde bunu da yapabilirsiniz.<\/p>\n\n\n\n<p>\u00d6ncelikle olu\u015fturmak istedi\u011finiz kodu bir dosyada saklay\u0131n. Saklad\u0131\u011f\u0131n\u0131z bu dosya herhangi bir uzant\u0131ya sahip olabilir <em>.cs<\/em>, <em>.txt<\/em>, <em>.abc<\/em> ya da istedi\u011finiz ba\u015fka bir uzant\u0131. Bu makalede dosya uzant\u0131s\u0131n\u0131n \u00f6nemli olmad\u0131\u011f\u0131n\u0131 g\u00f6stermek ad\u0131na <em>.txt<\/em> uzant\u0131s\u0131n\u0131 kullanaca\u011f\u0131m, <em>MerhabaDinamikDunya.txt<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png\" alt=\"MerhabaDinamikDunya.txt\"\/><\/a><\/figure>\n\n\n\n<p>Projeme ekledi\u011fim bu kodu makalemin devam\u0131nda kolayca debug edebilmek i\u00e7in \u00e7\u0131kt\u0131 klas\u00f6r\u00fcne kopyalamak istiyorum. Bunu i\u00e7in Solution Explorer\u2019da dosyaya ters t\u0131klay\u0131p properties se\u00e7ene\u011fi \u00fczerinden \u00f6zelliklerinin listelendi\u011fi ekrana gelip \u201c<em>Copy to Output Directory<\/em>\u201d \u00f6zelli\u011fini \u201c<em>Copy always<\/em>\u201d yap\u0131yorum.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxtProperties.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxtProperties_thumb.png\" alt=\"MerhabaDinamikDunya.txt Properties\"\/><\/a><\/figure>\n\n\n\n<p>Bu ad\u0131m\u0131 sizinde takip etmeniz zorunlu de\u011fil. Benim yapm\u0131\u015f olmam\u0131n tek nedeni kaynak kodunun bulundu\u011fu dosyan\u0131n uzun uzad\u0131ya absolute path\u2019\u0131n\u0131 vermek istememem. Dilerseniz sizde benimle ayn\u0131 \u015fekilde her derlemede kaynak kodu \u00e7\u0131kt\u0131 klas\u00f6r\u00fcne kopyalatabilir ya da kaynak kodun absolute path\u2019ini kullanabilirsiniz.<\/p>\n\n\n\n<p>Dinamik bir kodun debug edilebilmesi i\u00e7in \u00f6ncelikle tan\u0131mland\u0131\u011f\u0131 assembly\u2019nin debug edilebilir olarak i\u015faretlenmesi laz\u0131m. Bunu yapabilmek i\u00e7in <em>DebuggableAttribute<\/em>\u2019\u00fcn kullanman\u0131z gerekecektir. DebuggableAttribute\u2019\u00fcn\u00fc kullanarak .net runtime\u2019\u0131n bir mod\u00fcle ne \u015fekilde davranaca\u011f\u0131n\u0131 kontrol edebilirsiniz. Runtime \u00fcretilen kod i\u00e7erisinde ekstra bilgiler ta\u015f\u0131yabilir, hatta bu attribute\u2019\u00fcn ta\u015f\u0131d\u0131\u011f\u0131 de\u011ferler do\u011frultusunda varsay\u0131lan olarak yap\u0131lan baz\u0131 optimizasyonlar\u0131 iptal edebilirsiniz. Burada dikkat edilmesi gereken nokta, bir kodun debug edilebilmesi i\u00e7in DebuggableAttribute\u2019\u00fcn <em>DefineDynamicModule<\/em> metodu \u00e7a\u011fr\u0131lmadan \u00f6nce tan\u0131mlanarak <em>AssemblyBuilder<\/em> i\u00e7erisine attribute olarak eklenmi\u015f olmas\u0131 gerekti\u011fidir.<\/p>\n\n\n\n<p>A\u015fa\u011f\u0131daki kod par\u00e7ac\u0131\u011f\u0131 yard\u0131m\u0131yla AssemblyBuilder i\u00e7erisinde kullanaca\u011f\u0131m\u0131z DebuggableAttribute\u2019\u00fc bizim i\u00e7in olu\u015fturacak CustomAttributeBuilder\u2019\u0131 olu\u015fturabilirsiniz.<\/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=\"\">var debuggableAttributeCtor = typeof(DebuggableAttribute).GetConstructor(new[] { typeof(DebuggableAttribute.DebuggingModes) });\nvar debuggableAttributeBuilder = new CustomAttributeBuilder(debuggableAttributeCtor,\n    new object[] {\n        DebuggableAttribute.DebuggingModes.DisableOptimizations |\n        DebuggableAttribute.DebuggingModes.Default\n});<\/pre>\n\n\n\n<p>Olu\u015fturdu\u011fumuz bu <em>CustomAttributeBuilder<\/em> ile DebuggableAttribute\u2019\u00fc AssemblyBuilder i\u00e7erisine eklemek ise a\u015fa\u011f\u0131daki kodda g\u00f6r\u00fcld\u00fc\u011f\u00fc kadar kolay;<\/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=\"\">assemblyBuilder.SetCustomAttribute(debuggableAttributeBuilder);<\/pre>\n\n\n\n<p>Dinamik bir assembly\u2019nin debug edilebilmesi i\u00e7in ufak bir ayr\u0131nt\u0131 daha var; DefineDynamicModule ile mod\u00fcl tan\u0131mlamas\u0131n\u0131 yaparken sembol bilgilerinin de \u00fcretilmesi gerekti\u011fini belirtmeliyiz. \u00d6nceki makalemde sadece \u00fcretilecek olan dinamik mod\u00fcl\u00fcn ad\u0131n\u0131 verdi\u011fim DefineDynamicModule metodunu a\u015fa\u011f\u0131daki \u015fekilde yeniden d\u00fczenlemeliyiz;<\/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=\"\">var modul = assemblyBuilder.DefineDynamicModule(\"MerhabaDinamikDunya.exe\", true);<\/pre>\n\n\n\n<p>Yukar\u0131da s\u0131ralad\u0131\u011f\u0131m ad\u0131mlar sonras\u0131nda art\u0131k dinamik assembly\u2019mizi debug edilebilir \u015fekilde ayarlam\u0131\u015f oluyoruz; ama i\u015fimiz hen\u00fcz bitmedi. \u00d6ncelikle debug sembollerinin saklanaca\u011f\u0131 dok\u00fcman\u0131 (.pdb dosyas\u0131) haz\u0131rlamal\u0131, ard\u0131ndan da bu dok\u00fcmana debug bilgilerini eklemeliyiz.<\/p>\n\n\n\n<p>A\u015fa\u011f\u0131daki sat\u0131r debug sembollerinin saklanaca\u011f\u0131 dok\u00fcman\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flayacakt\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=\"\">var document = modul.DefineDocument(\"MerhabaDinamikDunya.txt\", SymLanguageType.CSharp, SymLanguageVendor.Microsoft, SymDocumentType.Text);<\/pre>\n\n\n\n<p>ModuleBuilder \u00fczerinden ula\u015f\u0131labilen DefineDocument metodu ilk parametre olarak bizden kaynak kodunun bulundu\u011fu dosyay\u0131 isteyecektir. Makalemin ba\u015f\u0131nda olu\u015fturdu\u011fu <em>MerhabaDinamikDunya.txt<\/em> dosya ad\u0131n\u0131 bu parametrede kullan\u0131yorum. Burada olu\u015fan assembly ile kaynak kodunun ayn\u0131 klas\u00f6rde bulunaca\u011f\u0131n\u0131 varsayd\u0131\u011f\u0131m i\u00e7in sadece kaynak kodu dosyas\u0131n\u0131n ad\u0131n\u0131 vermekle yetindim; fakat daha \u00f6ncede belirtti\u011fim gibi istenirse burada absolute path\u2019te kullan\u0131labilir. Ard\u0131ndan verece\u011finiz parametrelerle kullan\u0131lan programlama dilinin, dilin da\u011f\u0131t\u0131c\u0131s\u0131n\u0131n ve dok\u00fcman t\u00fcr\u00fcn\u00fcn guid de\u011ferlerini vermemiz gerekmekte. Bu de\u011ferleri biliyorsan\u0131z guid\u2019lerini olu\u015fturup parametre olarak ge\u00e7ebilir ya da benim yapt\u0131\u011f\u0131m gibi SymLanguageType, SymLanguageVendor ve SymDocumentType s\u0131n\u0131flar\u0131 i\u00e7erisinde tan\u0131mlanm\u0131\u015f static de\u011ferleri kullanabilirsiniz.<\/p>\n\n\n\n<p>Bu ad\u0131mlar\u0131 takip etmemiz ard\u0131nda art\u0131k kodumuzu \u00fcretirken ad\u0131m ad\u0131m bu \u00fcretilen kodun kaynak kodumuz i\u00e7erisinde hangi sat\u0131rlar\u0131 kapsad\u0131\u011f\u0131n\u0131 belirtmeliyiz. Bu \u015fekilde bir debugger debug edilen kod par\u00e7ac\u0131\u011f\u0131n\u0131n kaynak kod i\u00e7erisinde tam olarak nerede oldu\u011fu bilebilir. Bu bilgi a\u015fa\u011f\u0131daki \u00f6rnekte oldu\u011fu gibi MarkSequencePoint metodu yard\u0131m\u0131yla verilebilir.<\/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=\"\">ilOlusturucu.MarkSequencePoint(document, 3, 9, 3, 52);<\/pre>\n\n\n\n<p>Burada verdi\u011fimiz de\u011ferler bilginin hangi dok\u00fcmana yaz\u0131laca\u011f\u0131 ve ilgili kodun kaynak kod i\u00e7erisinde hangi sat\u0131r\/s\u00fctunda ba\u015flay\u0131p hangi sat\u0131r\/s\u00fctunda bitti\u011fini belirtmelidir. Yukar\u0131daki \u00f6rnek \u00fczerinden gidersek konsola \u201cMerhaba Dinamik D\u00fcnya\u201d yazd\u0131\u011f\u0131m kodun bulundu\u011fu 3.sat\u0131r 9. kolon ve biti\u015fi olan 3. kolon 52. sat\u0131r\u0131 belirtmekteyiz.<\/p>\n\n\n\n<p>\u015eimdiye kadar anlatt\u0131klar\u0131m\u0131 toparlad\u0131\u011f\u0131m\u0131zda ilk makalemdeki programa debug bilgileri a\u015fa\u011f\u0131daki \u015fekilde eklenebilmekte:<\/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=\"\">using System;\nusing System.Reflection;\nusing System.Reflection.Emit;\nusing System.Threading;\nusing System.Diagnostics;\nusing System.Diagnostics.SymbolStore;\n\nnamespace ReflectionEmitOrnegi\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            var assemblyAdi = new AssemblyName(\"MerhabaDinamikDunya\");\n            var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyAdi, AssemblyBuilderAccess.RunAndSave);\n\n            var debuggableAttributeCtor = typeof(DebuggableAttribute).GetConstructor(new[] { typeof(DebuggableAttribute.DebuggingModes) });\n            var debuggableAttributeBuilder = new CustomAttributeBuilder(debuggableAttributeCtor,\n                new object[] {\n                    DebuggableAttribute.DebuggingModes.DisableOptimizations |\n                    DebuggableAttribute.DebuggingModes.Default\n                });\n\n            assemblyBuilder.SetCustomAttribute(debuggableAttributeBuilder);\n\n            var modul = assemblyBuilder.DefineDynamicModule(\"MerhabaDinamikDunya.exe\", true);\n\n            var document = modul.DefineDocument(\"MerhabaDinamikDunya.txt\", SymLanguageType.CSharp, SymLanguageVendor.Microsoft, SymDocumentType.Text);\n\n            var typeBuilder = modul.DefineType(\"DinamikSinif\", TypeAttributes.Public | TypeAttributes.Class);\n\n            var metodbuilder = typeBuilder.DefineMethod(\"Main\",\n                MethodAttributes.HideBySig | MethodAttributes.Static | MethodAttributes.Public,\n                typeof(void),\n                new Type[] { typeof(string[]) });\n\n            metodbuilder.DefineParameter(1, ParameterAttributes.None, \"parametreler\");\n\n            var ilOlusturucu = metodbuilder.GetILGenerator();\n\n            ilOlusturucu.MarkSequencePoint(document, 3, 9, 3, 52);\n            \/\/ilOlusturucu.Emit(OpCodes.Ldstr, \"Merhaba Dinamik D\u00fcnya\");\n            \/\/ilOlusturucu.Emit(OpCodes.Call, typeof(Console).GetMethod(\"WriteLine\", new Type[] { typeof(string) }));\n            ilOlusturucu.EmitWriteLine(\"Merhaba Dinamik D\u00fcnya\");\n\n            ilOlusturucu.MarkSequencePoint(document, 4, 5, 4, 6);\n            ilOlusturucu.Emit(OpCodes.Ret);\n\n            var dinamikSinifType = typeBuilder.CreateType();\n\n            assemblyBuilder.SetEntryPoint(metodbuilder, PEFileKinds.ConsoleApplication);\n            assemblyBuilder.Save(\"MerhabaDinamikDunya.exe\");\n\n            dinamikSinifType.GetMethod(\"Main\").Invoke(null, new string[] { null });\n\n        }\n    }\n}<\/pre>\n\n\n\n<p>Yapmam\u0131z gereken sadece bu kadar. Bu ad\u0131mlar\u0131 do\u011fru \u015fekilde takip ederseniz art\u0131k kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda \u00e7\u0131kt\u0131 klas\u00f6r\u00fcnde <em>MerhabaDinamikDunya.exe<\/em> dosyas\u0131n\u0131n yan\u0131nda debug sembollerinin bulundu\u011fu <em>MerhabaDinamikDunya.pdb<\/em> dosyas\u0131n\u0131n da olu\u015ftu\u011fun\u0131u g\u00f6rebilirsiniz.<\/p>\n\n\n\n<p>Kodun debug edilip edilemedi\u011fini test etmek i\u00e7in makalemin ba\u015f\u0131nda belirtti\u011fim kod i\u00e7erisinde dinamik t\u00fcr\u00fcm\u00fcz\u00fc olu\u015fturarak \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z sat\u0131ra bir break point ekleyebiliriz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/breakpoint.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/breakpoint_thumb.png\" alt=\"Breakpoint\"\/><\/a><\/figure>\n\n\n\n<p>Uygulamam\u0131z\u0131 Visual Studio i\u00e7erisinden F5 ile debug edecek olursak bu sat\u0131rdaki BreakPoint\u2019e tak\u0131ld\u0131\u011f\u0131nda F11 ile kod i\u00e7erisine girmek istedi\u011fimizde Debugger\u2019\u0131m\u0131z\u0131n MerhabaDinamikDunya.txt i\u00e7erisinde 3. sat\u0131ra konumland\u0131\u011f\u0131n\u0131 rahatl\u0131kla g\u00f6rebiliriz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/txtBreakPoint.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/txtBreakPoint_thumb.png\" alt=\"MerhabaDinamikDunya.txt BreakPoint\"\/><\/a><\/figure>\n\n\n\n<p>Yukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde Locals penceresine dikkat ederseniz, burada yerel de\u011fi\u015fkenlerimizin de bulundu\u011funu g\u00f6rebiliriz.<\/p>\n\n\n\n<p>Art\u0131k bu kod i\u00e7erisinde Cursor\u2019u s\u00fcr\u00fckleyerek debug edilen kod i\u00e7erisinde debugger\u0131n ileri-geri gitmesini sa\u011flayabilir, de\u011fi\u015fken de\u011ferlerini de\u011fi\u015ftirebilir, hatta \u201c<em>\u0130mmediate Window<\/em>\u201d i\u00e7erisinde kod par\u00e7ac\u0131klar\u0131 dahi \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>","protected":false},"excerpt":{"rendered":"<p>Daha \u00f6nce yazd\u0131\u011f\u0131m makalemde sizlere \u00e7al\u0131\u015fma-zaman\u0131 dinamik kod olu\u015fturmay\u0131 anlatm\u0131\u015ft\u0131m. Yaz\u0131m ard\u0131ndan ald\u0131\u011f\u0131m baz\u0131 maillerde bu y\u00f6ntemi kullanmaya ba\u015flad\u0131ktan sonra ikinci bir ihtiyac\u0131n olu\u015ftu\u011funu g\u00f6rd\u00fcm; olu\u015fturulan dinamik kodun Debug edilebilmesi. Okuyaca\u011f\u0131n\u0131z yaz\u0131mda bu konuyu ele alarak dinamik kod olu\u015fturma s\u00fcrecinde yapaca\u011f\u0131n\u0131z ek kodlama ile nas\u0131l debug edilebilir bir kod olu\u015fturabilece\u011finizi g\u00f6stermeye \u00e7al\u0131\u015faca\u011f\u0131m. \u00d6ncelikle bir \u00f6nceki&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[41],"class_list":["post-12483","post","type-post","status-publish","format-standard","hentry","category-csharp","category-turkce","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek - 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\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"Daha \u00f6nce yazd\u0131\u011f\u0131m makalemde sizlere \u00e7al\u0131\u015fma-zaman\u0131 dinamik kod olu\u015fturmay\u0131 anlatm\u0131\u015ft\u0131m. Yaz\u0131m ard\u0131ndan ald\u0131\u011f\u0131m baz\u0131 maillerde bu y\u00f6ntemi kullanmaya ba\u015flad\u0131ktan sonra ikinci bir ihtiyac\u0131n olu\u015ftu\u011funu g\u00f6rd\u00fcm; olu\u015fturulan dinamik kodun Debug edilebilmesi. Okuyaca\u011f\u0131n\u0131z yaz\u0131mda bu konuyu ele alarak dinamik kod olu\u015fturma s\u00fcrecinde yapaca\u011f\u0131n\u0131z ek kodlama ile nas\u0131l debug edilebilir bir kod olu\u015fturabilece\u011finizi g\u00f6stermeye \u00e7al\u0131\u015faca\u011f\u0131m. \u00d6ncelikle bir \u00f6nceki...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2010-04-20T18:02:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-14T15:35:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.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=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek\",\"datePublished\":\"2010-04-20T18:02:29+00:00\",\"dateModified\":\"2021-06-14T15:35:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/\"},\"wordCount\":1186,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png\",\"keywords\":[\"C#\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/\",\"url\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/\",\"name\":\"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png\",\"datePublished\":\"2010-04-20T18:02:29+00:00\",\"dateModified\":\"2021-06-14T15:35:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek\"}]},{\"@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":"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek - 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\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/","og_locale":"en_US","og_type":"article","og_title":"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek - Fatih Boy","og_description":"Daha \u00f6nce yazd\u0131\u011f\u0131m makalemde sizlere \u00e7al\u0131\u015fma-zaman\u0131 dinamik kod olu\u015fturmay\u0131 anlatm\u0131\u015ft\u0131m. Yaz\u0131m ard\u0131ndan ald\u0131\u011f\u0131m baz\u0131 maillerde bu y\u00f6ntemi kullanmaya ba\u015flad\u0131ktan sonra ikinci bir ihtiyac\u0131n olu\u015ftu\u011funu g\u00f6rd\u00fcm; olu\u015fturulan dinamik kodun Debug edilebilmesi. Okuyaca\u011f\u0131n\u0131z yaz\u0131mda bu konuyu ele alarak dinamik kod olu\u015fturma s\u00fcrecinde yapaca\u011f\u0131n\u0131z ek kodlama ile nas\u0131l debug edilebilir bir kod olu\u015fturabilece\u011finizi g\u00f6stermeye \u00e7al\u0131\u015faca\u011f\u0131m. \u00d6ncelikle bir \u00f6nceki...Read More","og_url":"https:\/\/fatihboy.com\/en\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/","og_site_name":"Fatih Boy","article_published_time":"2010-04-20T18:02:29+00:00","article_modified_time":"2021-06-14T15:35:36+00:00","og_image":[{"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png","type":"","width":"","height":""}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek","datePublished":"2010-04-20T18:02:29+00:00","dateModified":"2021-06-14T15:35:36+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/"},"wordCount":1186,"commentCount":0,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png","keywords":["C#"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/","url":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/","name":"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png","datePublished":"2010-04-20T18:02:29+00:00","dateModified":"2021-06-14T15:35:36+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/MerhabaDinamikDunyaTxt_thumb.png"},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/dinamik-olusturulan-kodlara-debug-bilgisi-eklemek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"Dinamik Olu\u015fturulan Kodlara Debug Bilgisi Eklemek"}]},{"@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\/12483","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=12483"}],"version-history":[{"count":1,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/12483\/revisions"}],"predecessor-version":[{"id":33401,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/12483\/revisions\/33401"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=12483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=12483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=12483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}