调试时看不到变量值是为什么?
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c : Integer;
begin
a := 1;
b := a;
c := b;
Edit1.Text := IntToStr(c); //此处断点
end;
a,b,c都被引用过,可以看到debug时代码没有被优化掉(左边有点),按理说a,b,c的值都应该可以看到,在别人的机器上也确实如此。但在我机器上死活看不到,说Inaccessible value,但Edit1里还是显示了结果的。这是为什么?如何解决?
问题点数:100、回复次数:18Top
1 楼IwantFlay(小飞)回复于 2003-09-01 17:47:51 得分 0
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c : Integer;
begin
a := 1;
b := a;
c := b;
Edit1.Text := IntToStr(c);
end;//此处断点
Top
2 楼dahua(大华)回复于 2003-09-01 17:50:42 得分 0
不是吧,这样要有用还真是没天理了
谁碰到过这样的情况,请一定帮忙,保证结帖Top
3 楼IwantFlay(小飞)回复于 2003-09-01 18:13:32 得分 0
刚才写错了.是在Edit1.Text := IntToStr(c); 的下一行加一行代码,设一上数点看一下.
不过,你试了一下你的代码.没有问题啊.
就是照你的,还是可以看到c的值的.
你是不是在断点进,选中变量c,然后按一下CTRL+F7看看
不过在 b:=a;设断点,却不行,问题应该就在这儿Top
4 楼IwantFlay(小飞)回复于 2003-09-01 18:19:36 得分 0
:)是挺奇怪的.
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:integer;
begin
a := 1;
b := a;
if b<>0 then
c := b;
Edit1.Text := IntToStr(b);
end;
这样就可以居然.Top
5 楼weizi2000(秋风啊)回复于 2003-09-01 18:25:17 得分 0
可以看的到的,Edit1.Text := IntToStr(c); //此处断点,我刚试过。
变量窗口显示刚才执行过的那句代码的值,执行过就被覆盖了,也就是,
执行到end;时,它执行Edit1.Text := IntToStr(c);即把c := b 覆盖了,
它就不会显示1,而在执行到Edit1.Text := IntToStr(c); 时其显示上一
句执行结果。若你的不能显示,则应是你的Delphi系统有问题
Top
6 楼dahua(大华)回复于 2003-09-01 18:30:31 得分 0
to IwantFlay(我很爱她!!!!!!!!!!) :
"不过在 b:=a;设断点,却不行,问题应该就在这儿"
此时不行是因为a没有被引用过,一旦引用过就应该能看到,可是我就死活看不到
不是在哪里设断点的问题
to weizi2000(秋风啊) :
可以肯定是系统有问题,不总是这样的,前两天调试还好好的
我就是想知道有没有什么环境的设置可以解决这个问题
或者是delphi的bug?
重装有用么?Top
7 楼whqcfp(one_dollar)回复于 2003-09-01 18:34:22 得分 0
UP!Top
8 楼dahua(大华)回复于 2003-09-01 19:56:14 得分 0
3x for ur up
me up tooTop
9 楼hiflower(花)回复于 2003-09-02 08:41:11 得分 0
Project|Options 打开 Project Options 对话框,点 Compiler 窗格,在 Code generation 部分把 Optimization 前的勾去掉,编译器就不会帮你优化了。这时就算你在 end 上设断点,也能看到全部数据。:)
Top
10 楼dahua(大华)回复于 2003-09-02 12:22:23 得分 0
to hiflower(花):
这个我知道的,就算不去掉优化,只要引用了也是可以看到值的
我现在已经去掉了,可还是看不到。。。Top
11 楼hiflower(花)回复于 2003-09-02 12:35:03 得分 0
那就重启系统试试,再不行只有重装了Top
12 楼eliphe(未来)回复于 2003-09-02 12:48:07 得分 100
这个可能和金山词霸或winamp有关,因为delphi显示这种hint信息使用全局钩子,而金山和winamp等软件也有这样的全局钩子,所以造成冲突,就显示不出来了,建议关掉类似程序重试。Top
13 楼ehom(?!)回复于 2003-09-02 13:04:06 得分 0
编译器优化的问题,这里b := a;c := b;被优化成了一条传输指令,所以b的值当然无法看到,因为它根本就没使用过
Top
14 楼viaboy(平凡)回复于 2003-09-02 13:54:05 得分 0
upTop
15 楼sailer_shi(孤独的我,孤单的走,孤单的活着,孤单呀)回复于 2003-09-02 14:03:37 得分 0
你可以随便设上一个断点,然后打开View->debug windows->local variables就可以看到变量得值了Top
16 楼lihongyue(小头帘)回复于 2003-09-02 14:47:45 得分 0
我试过了,可以看到啊。Top
17 楼dahua(大华)回复于 2003-09-02 17:12:28 得分 0
to ehom(?!) :
不是这样的,在别人的机器上可以看到的
to eliphe(eliphe Alotus) :
我试试看吧,谢谢Top
18 楼ehom(?!)回复于 2003-09-02 17:54:39 得分 0
我只是说b的值看不到,这一定我可以确定,打开编译优化会少生成一条指令,不是说猜测,通过看CPU窗口可以证实
如果你是说所有值都看不到,那建议先给Delphi打补丁(当然我不知道你的版本),不打补丁,IDE中的Hint经常莫名其妙的出不来Top




