2012-10-14 22 views
6

Delphi'de hata ayıklama yaparken, bir istisna hataya neden olan kod satırını doğru şekilde söyleyecektir, ancak herhangi bir yerel değişkene erişemiyorum. Bu, hata ayıklayıcısında bir sınırlama mı? Yoksa basit bir şeyi mi özlüyorum? Şu anda, tüm yerel değişkenleri hatadan önceki hatta bir globale yansıtmalı, programı yeniden derlemeliyim ve aynı istisnayı tekrarlayabileceğimi ümit ediyorum. ÖrneğinDelphi istisnaları yerel değişkenleri görmeme izin vermiyor

MyArray[I]:=Foo(...); 

I ise önceki satırda bir küresel kapsamlı ayıklama değişkene yansıtılmış sürece, ben, değişken I ne olduğunu göremiyorum (sınırları açık Kontrolden birlikte) sınırların dışında . Ben

MyInteger:=Trunc(MyFloat), 

ve bir 6.1E+17MyFloat varsa

Ya, ben değerdir konusunda hiçbir fikrim yok.

+0

Bu, hata ayıklayıcısının bilinen bir sınırlamasıdır. Yapabileceğin çok şey yok. –

+0

Burada yeniyim (ilk gönderi). Ben "soru cevaplandı" bulmak için görünmüyor, ama başka bir şey gördüm "cevaplanan soru işaretlemek için hatırla." Bunu nasıl yaparım? –

+4

Hatırladığım kadarıyla, bu sınırlama ile karşılaştığımda, Robert, sorunun nedenine (bu sorunun yeniden üretilebileceğini varsayarak) bir açıklık belirledim, böylece istisnadan hemen önce yerel değişkenlere erişebiliyorum. Ya da, yerel kodu bir denemeyle kuşattım ... istisna ve bir blok noktası koyabildiğim bir bloğa bir satır ekledim. – RobertFrank

cevap

7

Arama yığını penceresinde doğru satırı seçtiğinizde yerel değişkenlerin değerlerini görebilirsiniz. Özel durum kaldırılmadan önce genellikle bir veya iki satırdır.

Bu uygulandığında tam sürüm elimde değil, ancak kesinlikle yeni sürümlerden biridir.

+2

D7'nin onaylayamadığını doğrulayabiliyorum, ancak D2007 çağrı yığınındaki uygun satıra çift tıklandığında yerel değişkenler penceresindeki (saatler penceresinde değil) değerleri gösterebilir. –

+0

Bu çalışmayı XE3'te doğruladım. Yığın izindeki her bir işlem veya işlev için neden iki yığın yok, ancak ikisiden biri hatalı sonuçlar veriyor, ancak diğeri doğru sonuçlar veriyor. Henüz herhangi bir gerçek hata ayıklama denemedim (sadece kasıtlı istisnalar), ama zamanın% 99'unu varsayardım, hangisinin doğru olduğu belli olacak. –

1

"Sorun", bildiğim kadarıyla derleyici tarafından kaynaklanır. Derleyicinin optimizasyon özelliği bir çöp toplayıcısı gibi davranır, artık kullanılmadığı zaman bir işlev içinde bildirilen değişkenleri serbest bırakır.

Sorunun üstesinden gelmek için, bir özel durum işleyici yazın ve özel durum yakalama bloğu içinde değişkenden sahte bir kullanım gerçekleştirin.

İlgili konular