2011-11-21 21 views
6

Có thể lấy giá trị biến không sử dụng bằng GDB không? Có một số cấu hình cho GCC để các giá trị rác của biến không sử dụng sẽ được hiển thị không 'tối ưu hóa ra'?Biến không sử dụng GDB

tập tin c:

#include<stdio.h> 

void main() 
{ 
    int x; 
    int y; 
    printf("value of x: %d",x); 

} 

Trong gdb tôi muốn có được giá trị rác của biến y.

(gdb) run 
Starting program: /home/charmae/workspace/AVT/a.out 

Breakpoint 1, main() at file4.c:7 
7  printf("value of x: %d",x); 
(gdb) info locals 
x = 2789364 
(gdb) p y 
$1 = <optimized out> 
(gdb) p x 
$2 = 2789364 
+1

Bạn đã quên thêm '% d' chưa? – Marlon

+0

Bạn có đang biên dịch bằng -O0 không? –

+0

tôi đã thử biên dịch với "gcc -O0 -g file.c" nhưng nó không hoạt động. – Chinwei

Trả lời

1

Nó không có gì để làm với GDB. Thực thể tối ưu hóa biến đó là trình biên dịch (có thể là GCC trong trường hợp của bạn). Bạn có thể buộc nó giữ nó bằng cách tuyên bố biến là dễ bay hơi

Câu hỏi hay hơn là - tại sao bạn đang cố gắng làm?

+0

Tôi đang tạo một chương trình trực quan hóa và tôi cần các giá trị cho các biến được khai báo .... tôi đã tự hỏi nếu biến chưa khai báo được cấp phát cho bộ nhớ, nếu có thì biến nên có một giá trị .. – Chinwei

+0

Nếu trình biên dịch đã tối ưu hóa biến đó thì không - chúng không được cấp không gian lưu trữ trong bộ nhớ để không có giá trị. – gby

0

Không liên quan gì đến gcc. Hoặc là trình biên dịch đã biên dịch mã để duy trì giá trị, hoặc nó đã không.

0

Bạn có thể thêm câu lệnh y=y;. Điều đó sẽ buộc y được sử dụng, và với gcc -O0 -g theo dõi nó (ít nhất là trên tôi Linux/Debian/Sid/AMD64 với gcc 4.6.2gdb 7.3.50)

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