Debug sorunu

Başlatan bunalmis, 21 Ocak 2010, 11:40:20

z

Programın hatalı kısmını adım adım çalıştırarak değişkenlerin aldığı değerleri izleyerek hatayı köşeye sıkıştırmaya çalışıyorum.

Bunun için ilave değişkenler oluşturup içine ara değerler attırıyorum.

Gel gelelim bu değişkenler hiç bir yerde kullanılmadığı için derleyici bu değişkenlere değer atama yapılan satıları atlıyor.

Dolayısı ile hata izleme amacıyla oluşturduğum bu değişkenler işe yaramıyor.

Optimizasyon özelliğini de kapadım. Sonuç değişmedi.

Bu sorunu nasıl çözerim?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

hocam eğer amaç  , programın oraya girip girmediğini öğrenmek ise , breakpoint koyarak yaparsınız. Ya da  bir tane label koyup , değişken değerini burada gösterirsiniz.

z

Yok hocam zaten programı breakpoint ile durduruyor ve satırları adım adım çalıştırıyorum.

Bu esnada hesaplanan sonuçların sayısal değerleri ile ilgileniyorum.
Kursoru mouse ile herhangi bir değişkenin üstüne getirdiğimde değişkenin içeriği gösteriliyor.

Sorun debug amaçlı oluşturduğum değişken içeriklerini göremiyor olmam.

Örnegin aşağıdaki örnekte b değişkeni debug amaçlı oluşturuldu ve işi bitince silip atayacağım.

function f():boolean;
var a,b:integer;
begin
       a:=x+y+z; // 1.satır
       b:=X+y;    // 2.satir
       form1.caption:=inttostr(a);
end;

örneğinde a değişkeni form caption değerinde kullanılacağı için a değerini mouse ile yaklaşıp öğrenebiliyorum.

Ancak b değeri atamadan sonra hiç bir yerde kullanılmadığı için b değerini öğrenemiyorum. Halbuki b içeriği hatayı anlamam için önemli.

Yukarıdaki kodu, b içeriğini amlamak için aşağıdaki hale getirmek işime gelmiyor çünkü yazılmış programda olabildiğince az değişiklik yapmak sadece hatayı yakalamaya odaklanmak istiyorum.

function f():boolean;
var a,b:integer;
begin
       a:=x+y+z; // 1.satır
       b:=X+y;    // 2.satir
       form1.caption:=inttostr(a);
       form1.caption:=inttostr(b);
end;

Derleyicinin kendi kafasına göre bu değişken kullanılmıyor cpuya boşu boşuna bu değişkene atanacak değeri hesaplatmayım uğraşmasın demesi güzel hoş ama derleyicinin debug aşamasında bu akıllılığı göstermesine kızıyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Salih

Debug için kullanacağın değişkeni global olarak tanımla. Çünkü fonksiyon içinde tanımlananlar fonksiyon boyunca oluşturulup yok ediliyorlar.
Globaller program boyunca hayatta kalıyorlar.

Klein

Hocam Dediğinizi  yapabiliyorum ama her seferinde olmuyor.  nedenini biraz araştırayım bildiririm.

Edit:
Hocam bir yolunu buldum ama biraz alengirli:
1- Değişkeni watch penceresine akliyoruz.
2- değişkeni bir yerde gösteriyoruz.
3- Programı çalıştırıyoruz.
4- Programı durduruyoruz(kapatıyoruz)
5-  değişkeni  göterdiğimiz satırı siliyoruz.
6- Programı tekrar çalıştırdığımızda  değişkenin değerini görebiliyoruz.
7- Programı kapatıp açsak da  , artık değişken değerini görebiliyoruz.

z

Zaten ben de fonksiyon içindeki hatayı yoketmeye çalışıyorum. Yani değişkenimi global yapmama gerek yok.

Derdimi en kötü ihtimal değişken içeriğini bir yerde (form.caption vs) de kullanarak içeriğini öğrenirim ama karşılaştığım bu sorun için derleyicinin opsiyonlarında bir seçenek olması lazım.

Derleyiciye, kardeşim sen benim işime karışma ben ne diyorsam onu yap demek en doğal hakkım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Hocam bir yolunu buldum ama biraz alengirli:

1- Değişkeni watch penceresine akliyoruz.
2- değişkeni bir yerde gösteriyoruz.
3- Programı çalıştırıyoruz.
4- Programı durduruyoruz(kapatıyoruz)
5- değişkeni göterdiğimiz satırı siliyoruz.
6- Programı tekrar çalıştırdığımızda değişkenin değerini görebiliyoruz.
7- Programı kapatıp açsak da , artık değişken değerini görebiliyoruz.

z

Evet bayagı alengirliymiş.

Sanırım bu bir bug.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com