Tôi có đoạn code mẫu sau trong D:Làm thế nào để hiển thị số dòng trong backtraces D?
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);
}
tôi biên soạn mã này với DMD (sử dụng v2.056 trên OS X). Khi tôi chạy nó, nó rõ ràng bị treo:
[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ó cách nào để lấy số dòng trong backtrace thay vì vị trí không? Tôi có thể thấy số dòng của vụ tai nạn (5
trong [email protected](5)
), nhưng nó chỉ là đầu của backtrace. Tôi có thể lấy số dòng bên trong f()
và main()
không?
Tại sao bạn cần trình gỡ lỗi? Biên dịch với thông tin gỡ lỗi là đủ. – Trass3r
Vì thời gian chạy không thực hiện trình phân tích cú pháp thông tin gỡ lỗi đến mức có được số dòng? –
Đoán đó là một vấn đề Linux sau đó. Việc thực hiện stacktrace Windows tôi sử dụng được số dòng. – Trass3r