Thread overview
Exception calismiyo...
Jan 22, 2011
Mengu
January 22, 2011

selamlar afsin,

bu gdc ile ilgili bir problem olabilir mi? ben dmd ile derledim ve sorunsuz calisti.

mengu@mengu-dell:~/projects/d$ ./exp
true or false please: true
was: true
mengu@mengu-dell:~/projects/d$ ./exp
true or false please: false
was: false
mengu@mengu-dell:~/projects/d$ ./exp
true or false please: scala
object.Exception: unknown: scala true or false please
----------------
/exp(bool exp.read_bool(immutable(char)[])) [0x8086043]
/exp(_Dmain+0x14) [0x8085f18]
/exp(extern (C) int rt.dmain2.main(int, char**)) [0x808bf46]
/exp(extern (C) int rt.dmain2.main(int, char**)) [0x808bea0]
/exp(extern (C) int rt.dmain2.main(int, char**)) [0x808bf8a]
/exp(extern (C) int rt.dmain2.main(int, char**)) [0x808bea0]
/exp(main+0x96) [0x808be46]
/lib/libc.so.6(__libc_start_main+0xe7) [0x846ce7]
/exp() [0x8085e51]

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

January 22, 2011

Merhaba,

söyle bir program yazdim, fakat olmuyo:

[ 15:28:49 ] vs244123:~% nl -ba exception.d
1 #!/opt/usr/local/bin/gdmd -run
2
3 import std.cstream;
4 import std.stdio;
5
6 void main()
7 {
8 bool binput;
9
10 binput = read_bool("true or false please: ");
11
12 writeln("was: ", binput);
13 }
14
15 bool read_bool(string message)
16 {
17 dout.writef(message);
18
19 char[] input;
20 din.readf(&input);
21
22 bool binput;
23
24 if (input == "false") {
25 binput = false;
26 } else if (input == "true") {
27 binput = true;
28 } else {
29 throw new
30 Exception(
31 ("unknown: " ~ input ~ " true or false please").idup);
32 }
33
34 return binput;
35 }
[ 15:28:53 ] vs244123:~% ./exception.d
true or false please: true
was: true
[ 15:29:11 ] vs244123:~% ./exception.d
true or false please: ggg
[ 15:29:23 ] vs244123:~%

Sistemim:

[ 15:29:23 ] vs244123:~% uname -a
Linux vs244123.vserver.de 2.6.9-023stab052.4-smp #1 SMP Tue May 11 19:21:39 MSD 2010 x86_64 GNU/Linux

[ 15:33:05 ] vs244123:~% gdc -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --enable-languages=d --disable-shared --disable-bootstrap
Thread model: posix
gcc version 4.4.5 20101001 (gdc hg, using dmd 2.051) (GCC)
[ 15:33:13 ] vs244123:~%

Tesekkürler, selamlar,
Afsin

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

January 22, 2011

Güzel renkli görünsün diye bir de satır numarasız olarak:

#!/opt/usr/local/bin/gdmd -run

import std.cstream;
import std.stdio;

void main()
{
 bool binput;

 binput = read_bool("true or false please: ");

 writeln("was: ", binput);
}

bool read_bool(string message)
{
 dout.writef(message);

 char[] input;
 din.readf(&input);

 bool binput;

 if (input == "false") {
   binput = false;
 } else if (input == "true") {
   binput = true;
 } else {
   throw new
     Exception(
               ("unknown: " ~ input ~ " true or false please").idup);
 }

 return binput;
}

Yani "true" ve "false"tan başka bir şey girildiğinde programın yakalanmayan bir hata ile sonlanmasını bekliyoruz, ama hata mesajı vermeden sonlanıyor.

Benim hiç deneyimim olmayan yeni gdc'yi kullanıyorsun. Tek tahminim, gdc atılan hatayı bir şekilde yutuyor. Eğer öyleyse gdc'nin hatasıdır; çünkü doğru olarak çalışması için atılan hatanın da göserilmesi gerekiyor.

Ben dmd ve rdmd 2.051 ile denedim; bende hatalı olarak sonlandı.

gdmd'nin de rdmd'nin gdc ile gelen olduğunu tahmin ediyorum. Yapılabilecekler:

  • main'deki kodu bütünüyle bir try-catch bloğu içine almayı dener misin; bakalım hiç olmazsa kendimiz yakalayabiliyor muyuz:
void main()
{
   try {
       bool binput;

       binput = read_bool("true or false please: ");

       writeln("was: ", binput);

   } catch (Exception hata) {
       writeln("HATA: ", hata);
   }
}
  • gdc'nin D2 desteği çok yeni; hataları bulunabilir; onun yerine dmd ve rdmd'yi deneyebilir misin. (Ama daha 64 bit desteği yok; çıktı çıkacak; bekliyoruz. :))

Ali

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