• 1 Oy - 5 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
C# Fonksiyonun nereden çağrıldığını bulma [StackTrace/StackFrame]
#1
Şimdi eski yazılarımı karıştırırken buldum. Önemli de bir konu olduğunu düşünüyorum. 

Unity3D kategorisine açtım ama asıl olarak C# için geçerli bir konu. Daha sonra C# kategorisi açılırsa konu oraya taşınmalı notunu da ekleyeyim.

2015 yılında Unity3D ile çalışırken hata mesajlarına bakıyordum ve kafama şu soru takıldı.

"Bu fonksiyonun nereden çağrıldığı bilgisini nasıl bulabilirim?" 

Yani bir belki Logger sistemi yazıyorum. Bir fonksiyon çağrılmış. Ve ekrana hata yazdıracağım. O fonksiyonu ne çağırdı bunu bilmek istiyorum? 

Bu araştırmalarımın sonucu beni 2 sonuca çıkartmıştı.

Öncelikle bunun için bir Attribute var bundan bahsedelim;
Kod:
using System.Runtime.CompilerServices;

static void BirFonksiyon([CallerMemberName]string memberName="")
{
  Console.WriteLine("Çağıran fonksiyonun adı" + memberName);
}




Bu işimizi görmüyor ise; diyelim ki biz bütün çağrılma ağını almak istiyoruz o zaman StackTrace ile bütün StackFrameleri alabiliriz.

Kod:
using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;

class Program
{
   static void Main(string[] args)
   {
       Test1();
   }
   static void Test1()
   {
       Test2();
   }
   static void Test2()
   {
       BirFonksiyon();
   }
   static void BirFonksiyon()
   {
       StackTrace trace = new StackTrace();
       var tersHali = trace.GetFrames().Reverse().SkipLast(1);
       //Ters halini almak istedim. En üstten aşağıya doğru nerden çağrılmış görelim.
       //BirFonksiyon() listede olsun istemediğim için sonuncuyu SkipLast(1) kullanarak listeden çıkarttım.
       foreach (var y in tersHali)
       {
           Console.WriteLine("Hangi aşamalardan çağrılmış : " + y.GetMethod().Name);
           //Sonuncu bu fonksiyon. İstersek bunu da listeden silebiliriz.
       }
   }
   //Console Çıktısı ;
   //Hangi aşamalardan çağrılmış : Main
   //Hangi aşamalardan çağrılmış : Test1
   //Hangi aşamalardan çağrılmış : Test2
}

[Resim: xdeee.png]
  Alıntı


Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi