Người Nga được tuyển dụng đã đưa ra giải pháp đúng nhưng đối với những người muốn xem giải pháp được sử dụng trong ví dụ dưới đây. Nếu bạn không chắc chắn nếu bạn muốn cam kết đặt .gdbinit trong thư mục chính của bạn, bạn cũng có thể đặt nó vào thư mục mà bạn đang thực thi chương trình từ để thử nghiệm.
$ gcc -g atof_ex4.2.c
$ gdb ./a.out
(gdb) b 30
Breakpoint 1 at 0x1907: file atof_ex4.2.c, line 30.
(gdb) h user-defined
List of commands:
disp_vars -- User-defined
(gdb) disp_vars #this will enable the user defined canned sequence (but I haven't done run yet! So I'll this actually doesn't work yet.)
No symbol "i" in current context.
(gdb) r
Starting program: a.out
Breakpoint 1, atof (s=0xbffff028 "123.45e-6") at atof_ex4.2.c:30
30 if(s[i] != '\0')
(gdb) s # No disp_vars output yet because I have to do it AFTER 'run' command
32 if(s[i] == 'e' || s[i] == 'E')
(gdb) disp_vars # Now it will work ;)
(gdb) s
35 sign = (s[i] == '-') ? -1 : 1;
5: s[i] = 45 '-'
4: exp = 14
3: val = 123.45
2: sign = 1
1: i = 7
Tất nhiên 'r' là để chạy, 'cho bước', b 'là để ngắt, v.v. Tôi cũng bỏ qua một số đầu ra. Lưu ý rằng tôi phải nhập lại lệnh 'disp_vars' sau khi 'chạy'. Cảm ơn người Nga.
Đó là một tiêu đề thực sự hữu ích mà bạn đã có ở đó. –
Đó là một câu hỏi hay nhưng với tiêu đề xấu ... – Johan
Đã chỉnh sửa tiêu đề – ChrisW