2011-11-21 12 views
5

Ho il seguente codice di esempio in D:Come visualizzare i numeri di riga in D backtrace?

import std.stdio; 

int g(int i) { 
    auto l = [1, 2, 3, 4]; 
    return l[i]; 
} 

void f(int i) { 
    writeln(g(i)); 
} 

void main(string[] args) { 
    f(1); 
    f(10); 
    f(2); 
} 

ho compilato questo codice con DMD (utilizzando v2.056 su OS X). Quando lo eseguo, si blocca ovviamente:

[email protected](5): Range violation 
---------------- 
5 test 0x000b823a _d_array_bounds + 30 
6 test 0x000aa44b D4test7__arrayZ + 27 
7 test 0x000aa4ae int test.g(int) + 94 
8 test 0x000aa4c7 void test.f(int) + 11 
9 test 0x000aa422 _Dmain + 26 
10 test 0x000b87b3 extern (C) int rt.dmain2.main(int, char**).void runMain() + 23 
11 test 0x000b835d extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate()) + 29 
12 test 0x000b8800 extern (C) int rt.dmain2.main(int, char**).void runAll() + 64 
13 test 0x000b835d extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate()) + 29 
14 test 0x000b82f7 main + 179 
15 test 0x000aa3fd start + 53 
16 ???  0x00000001 0x0 + 1 
---------------- 

C'è un modo per ottenere i numeri di riga nel backtrace anziché nelle posizioni? Riesco a vedere il numero di linea del crash (lo 5 in [email protected](5)), ma è solo la parte superiore del backtrace. Posso ottenere i numeri di linea all'interno di f() e main()?

risposta

3

Poiché il tempo di esecuzione D non implementa le informazioni di debug sufficienti per ottenere i numeri di riga, è necessario utilizzare un debugger. Ci si può aspettare che ciò che si desidera venga implementato in un determinato momento.

Per ora, compilare il programma con il flag -gc, quindi eseguire il programma tramite gdb.

+1

Perché avresti bisogno di un debugger? Compilare con le informazioni di debug dovrebbe essere sufficiente. – Trass3r

+1

Poiché il runtime non implementa un parser di informazioni di debug al fine di ottenere i numeri di riga? –

+0

Suppongo che sia un problema con Linux allora. L'implementazione dello stacktrace Windows che utilizzo ottiene i numeri di riga. – Trass3r

Problemi correlati