2011-05-23 20 views
5

MonoTouch kodum için yararlı bir genel kural dışı durum işleyicisi uygulamaya çalışıyorum.MonoTouch yığın izleri ayrıntılı değil

Bir işleyiciyi AppDomain.CurrentDomain.UnhandledException'a eklerseniz, hiç yığın izi yok, yani .StackTrace özelliği boş veya boş. Bunun yani

at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00000] in <filename unknown>:0 
at MonoTouch.UIKit.UIApplication.Main (System.String[] args) [0x00000] in <filename unknown>:0 
at MyNamespace.MyProduct.MyProject.Application.Main (System.String[] args) [0x00000] in <filename unknown>:0 

ben istisna yakalandı Ana() yönteminin daha derme gitmez: Ben try {} catch {} benim UIApplication.Main(args) çağrısı sarın Eğer

, yığın izleme herhangi yararlı bilgiler içermiyor .

Yığın izinde nasıl daha yararlı bilgiler edinebileceğime dair herhangi bir fikriniz var mı, yoksa tümüyle AOT derlemesi tarafından tamamen mi eniyileştirildi? (Yığın izleme, hata ayıklama modunda beklendiği gibi.)

cevap

1

Sen bırakma kodda satır numaraları veya dosya adları almak mümkün olmayacaktır satır numaraları alacak. Bu bilgi yok edildi. Bununla birlikte, en azından sınıf/çağrı hiyerarşisini görmek için kodunuza tam yığın izini almanız gerekir.

Sanırım, bir sürüm oluşturmada hata ayıklama yapamayacağınız ya da çalışan istisnaları yakalayamayacağınız gibi göründüğünüzden emin olmak gerekir. Ne yapmak eğiliminde olduğumu, daha sonra denetlemek için bir günlük dosyasına özel durumları günlüğe kaydetmektir.

Bu işlem, aşağıdaki kodu ile başlar:

StackTrace trace = new StackTrace(true); 

    foreach(StackFrame frame in trace.GetFrames()) 
     ... log data to log file 

Ayrıca çok istisna ile StackTrace nesneleri oluşturabilir. Orada oynamaya başlarım. Mono'nun bu verilere maruz kalmaması nedeniyle hatanın iOS bölümünün derinlerinde bir hata meydana gelmesi durumunda birçok durumda yığın izini alamayacağınızı unutmayın. Yalnızca ana yönteme giden bir istisna veya çarpışma genellikle daha düşük bir seviyeye işaret eder.

3

--debug komut satırı seçeneğini kullanın veya MonoDevelop'ta "Debug | iPhone" yapılandırmasını seçin.

bu seçenek daha yavaş yürütülmesine neden unutmayın, ancak vb istisnalar

+0

Sorunun gibi, bunun hata ayıklama modunda iyi çalıştığını biliyorum. Bu işleyiciyi serbest bırakılan koda dahil etmek istedim - ancak tüm hata ayıklama bilgilerinin kaldırılıp kaldırılmadığının bir anlamı yok. Soru şu: serbest bırakma modu kodunda yığın izi elde etmenin bir yolu yok mu? – tomfanning

İlgili konular