2012-04-11 22 views
5

System.Diagnostics kullanılırken yığın izini yazdırmak çok zor değildir. Her yönteme iletilen parametrelerin VALUES'lerini yığın izlemeye kadar yazdırmanın mümkün olup olmadığını merak ediyorum ve eğer olmasın. peşinParametrelerin değerlerini yığın izlemeye göre yazdırma

public static class CallStackTracker 
{ 
    public static void Print() 
    { 
     var st = new StackTrace(); 
     for (int i = 0; i < st.FrameCount; i++) 
     { 
      var frame = st.GetFrame(i); 
      var mb = frame.GetMethod(); 
      var parameters = mb.GetParameters(); 
      foreach (var p in parameters) 
      { 
       // Stuff probably goes here, but is there another way? 
      } 
     } 
    } 
} 

Teşekkür:

İşte benim ön kodudur.

+0

gelen CLR ayıklama API'leri işe yaramaz: 'MethodInfo.GetParameters' ilan parametreleri, değil argüman değerleri ... –

+0

@ThomasLevesque döndürür: Ok, bu nedenle bu özel appraoch çalışmayabilir. Başka olacak mı? – user420667

+0

Sadece bir hata ayıklayıcının, .pdb dosyasında bulunan gerekli bilgilerde bir görüntüsü vardır. Ancak, oradan hızlı bir şekilde iner, bir program kendini hata ayıklayamaz ve bilgi sadece Hata Ayıklama yapısı için doğrudur. Yöntem çağrılarını optimize etmek çok önemli bir jitter optimizer hedefidir. Bu işi yapamazsın. –

cevap

2

Bunu en azından System.Diagnostics tarafından sağlanan sınıflarla yapamazsınız. StackFrame sınıf argüman değerleri bunu ile yapmak mümkün mü

(MethodBase.GetParameters ilan parametreler, örneğin isimleri ve tipleri, ancak gerçek argümanlar değil değerleri hakkında bilgi sağlar) erişmek için bir yol sağlamaz ama muhtemelen değil C#

+0

+1. Bunun neden kolayca sağlanamayacağını anlamıyorum. – user420667

İlgili konular