2009-01-24 34 views
8

Làm cách nào để yêu cầu hiển thị nhiều vars trong một dòng? Vì vậy, tôi muốn có được kết quả đầu ra như:Sử dụng gdb, hiển thị nhiều vars trong một dòng?

30  if(s[i] != '\0') 
5: s[i] = 101 'e' 
4: exp = 14 
3: val = 123.45 
2: sign = 1 
1: i = 6 

Tôi đã nhập vào [NH] ENTER disp exp ENTER (v.v.) và tôi biết rằng phải có cách tốt hơn để làm điều này trong một dòng đánh máy.

+0

Đó là một tiêu đề thực sự hữu ích mà bạn đã có ở đó. –

+0

Đó là một câu hỏi hay nhưng với tiêu đề xấu ... – Johan

+0

Đã chỉnh sửa tiêu đề – ChrisW

Trả lời

9

Thành lập nhiều hoạt động "màn hình biến" mà không cần gõ mỗi display i, display s[i] vv mỗi khi bạn khởi động lại GDB, sử dụng một GDB "đóng hộp chuỗi lệnh".

Ví dụ, thêm video này vào ~/.gdbinit của bạn:

define disp_vars 
    disp i 
    disp sign 
    disp val 
    disp exp 
    disp s[i] 
end 

Bây giờ bạn có thể thêm tất cả các màn hình cùng một lúc bằng cách gõ disp_vars tại dấu nhắc GDB.

+0

Cảm ơn, nhưng hiển thị tiếp tục hiển thị các vars khi tôi bước qua. Tôi phải cắt n qua printf cho từng bước! – Rob

+0

Bỏ qua nhận xét của tôi ở trên vì bạn đã thay đổi câu trả lời từ printf đơn giản thành giải pháp. Cảm ơn. Tôi đang đánh dấu câu trả lời của bạn như một giải pháp! – Rob

4

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.

Các vấn đề liên quan