Forum: Duyurular RSS
Hata ayıklayıcı ZeroBUGS
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Hata ayıklayıcı ZeroBUGS
Geleneksel Linux hata ayıklayıcısı gdb'nin geliştirme sürümlerinin dmd ile çalıştığını duymuştum ama denemedim.

ZeroBUGS'dan da yeni haberim oldu:

  http://www.zerobugs.org/

Onu da denemedim. :D

Ali
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bir de şu bağlantı verildi:

  http://www.zero-bugs.com/2.0/product_intro_2.html

Ali
canalpay (Moderatör) #3
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Benim çok önceden haberim olmuştu ancak paralı olduğu için denemedim. Hemde hiç bir yerinede D2'yi desteklediğini belirten bir yazı görmedim.
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
ancak paralı

Boşveriyorum o zaman. :D

hiç bir yerinede D2'yi desteklediğini belirten bir yazı görmedim

Şu sayfada D için de deneysel olduğu yazılı:

  http://www.zerobugs.org/faq

Ama sorun isimlerde çıkıyor zaten. Yoksa bir kere çalışan program olmuşsa, o sayfada da anlatıldığı gibi, programın STABS ve DWARF bilgileri dilden bağımsız. (Bunları bildiğim sanılmasın.)

Ali
canalpay (Moderatör) #5
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
GDB'nin D'yi destekleyip desteklemediğini nasıl öğrenebiliriz ?

Örneğin :
canalpay@canalpay-desktop:~$ dmd isimsiz.d -g
canalpay@canalpay-desktop:~$ gdb isimsiz
GNU gdb (GDB) 7.0-ubuntu
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/canalpay/isimsiz...done.
(gdb) run
Starting program: /home/canalpay/isimsiz
[Thread debugging using libthread_db enabled]
„Íצ×á
6

Program received signal SIGSEGV, Segmentation fault.
0x080558bf in _D3std3utf6toUTF8FJG4awZAa ()

Kodda gerçekte hatalı. Şimdi bu destekliyor mu, desteklemiyor mu ?
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Öncelikle, programın -g (veya -gc) ile derlenmiş olması gerek. Ondan sonra,

- parçalama arızası durumundayken bt yazdığında program yığıtındaki işlevleri gösteriyor mu?

- up yazıldığında bir üst işleve geçer

- dn yazıldığında bir sonrakine geçer

- vs. başka gdb komutları

Eğer bunlar mantıklı çıktı veriyorsa, senin gdb D'yi anlıyor demektir. (Benim 6.8-37.el5 sürümü anlamıyor.)

Ali
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Evet, dmd'nin -gc seçeneği bende de işe yarıyormuş. En azından şu bozuk program için:

void zar()
{
    int * p; // null
    *p = 42;
}
 
void bar()
{
    zar();
}
 
void foo()
{
    bar();
}
 
void main()
{
    foo();
}

Konsolda şunları uyguladım:

$ dmd deneme.d -gc -w          <-- derleme
$ gdb deneme                      <-- programı gdb ile açma
GNU gdb Fedora (6.8-37.el5)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
(gdb) run                   <-- programı çalıştırma
Starting program: /home/acehreli/deneme/d/deneme
[Thread debugging using libthread_db enabled]
[New Thread 0x1c7730 (LWP 12603)]

Program received signal SIGSEGV, Segmentation fault.  <-- hata
deneme.zar () at deneme.d:19466     <-- dosya ve satır
19466       *p = 42;                <-- hatalı işlem
(gdb) bt      <-- işlev çağrı durumu (backtrace)
#0  deneme.zar () at deneme.d:19466
#1  0x08049030 in deneme.bar () at deneme.d:19471
#2  0x0804903c in deneme.foo () at deneme.d:19476
#3  0x08049048 in D main () at deneme.d:19481
#4  0x0804b6e4 in _D2rt6dmain24mainUiPPaZi7runMainMFZv ()
#5  0x0804b649 in _D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
#6  0x0804b721 in _D2rt6dmain24mainUiPPaZi6runAllMFZv ()
#7  0x0804b649 in _D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv ()
#8  0x0804b5f8 in main ()
(gdb) up           <-- bir önceki işleve çık
#1  0x08049030 in deneme.bar () at deneme.d:19471
19471       zar(); <-- bir önceki bu çağrıymış
(gdb) up           vs.
#2  0x0804903c in deneme.foo () at deneme.d:19476
19476       bar();
(gdb) up
#3  0x08049048 in D main () at deneme.d:19481
19481       foo();
(gdb) up
#4  0x0804b6e4 in _D2rt6dmain24mainUiPPaZi7runMainMFZv ()
(gdb) q       <-- gdb'den çık
The program is running.  Exit anyway? (y or n) y

Ali
canalpay (Moderatör) #8
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
O bozuk program için bende -g'de gc'de işe yaradı.

Tabi çalıştırırken verdiği hata kodlarında çok hafif farklar vardı.

Benim gdb 7.0

Bu arada hata neden kaynaklanıyor ? Göstergenin neresi yanlış ?
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Bu arada hata neden kaynaklanıyor ? Göstergenin neresi yanlış ?

Gösterge hiçbir int'i göstermiyor; değeri null...

Şu doğru olur:

int * p = &varOlanDeğişken;

Veya dinamik bir int olarak:

int * p = new int;

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Duyurular RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 19:37:25 (UTC -08:00)