Thread overview
July 13, 2010

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2010

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 ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2010

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ış ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2010

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2010

Bir de şu bağlantı verildi:

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

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2010

Alıntı (canalpay):

>

ancak paralı

Boşveriyorum o zaman. :D

Alıntı:

>

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2010

Ö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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2010

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 13, 2010

Alıntı (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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]