高难度问题,已经1个星期无人能解决!!--用Delphi少于2年者勿进!!(100分)

  • 主题发起人 主题发起人 TourAn
  • 开始时间 开始时间
比如说有两个单元,form1是主窗体,当form2自动建立时,TForm2.Button1Click函数在编译时就有蓝色小圆点,如果form2不自动建立,则unit2整个单元就最后的
'end.'这一句代码有蓝色小圆点,就像你给的截图那样。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, unit2;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('qwe');
end;

end.

*****************************************************************************
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
showmessage('asdx');
end;

end.
 
这种情况,我遇到过不少,
一种情况是:
来自:killgates, 时间:2004-6-4 11:31:30, ID:2645451
3 代码无效,被优化,如
i :=1;
i :=2;
第一行有可能跟踪不到。
另一种情况程序是没有问题的,这时你可以重新打开delphi或在那段代码乱写些东西,让它编译出错,然后再改回原来的就没问题了。
 
我也碰到过,你在资源管理器中查一下你说调试不到的单元文件名相同的文件,
应该是有两个或以上的,先把所有的DCU删除,再把不是你真正用到的那个删除或改名

肯定可以的,但这只是权宜之计,最好是删除工程文件重建一个。
 
哎~~~

第一:unDesign.pas的end.一行已经显示可设断点,表明这个单元已经被编译到了。所以前面大家所说的“调试不到的单元文件名相同的文件”,或者类似的说法是错的。

第二:这个现象应该是编译优化的问题。因为Delphi编译器不会将没有用到的代码链接到目标文件中。我注意到unDesign.pas中是一个TfrmDesign类,那这通常有两种可能:
1. 在其它的某个被引用单元中有一个TfrmDesign类
2. 在其它单元中,声明了TfrmDesign类型的变量,但没有用它。例如从来没有调用过.Create()。

--------
OK. 以上是常规的判断。然后我又看了一下TourAn的说明。我发现你有这样一段解释:“
对该单元的修改在运行之后都显示修改生效,在断点出加上showmessage都会弹出对话框来的,因为该单元是个窗口,所有事件我都测试过没有问题”。

这个,我又仔细想了想~首先,在end.这一行前加的代码是单元初始化或结束化的,所以你在这个位置加showmessage(),则无论单元中的TfrmDesign是否被使用,end.这一行都会被编译进去,这也包括前面的初始化和结束化代码。所以这个位置上加showmessage()的结果只能证明该单元被链接到,并不能证明TfrmDesign被使用了。

由于这是一个窗体,所以,建议你在创建窗体的单元中,在.Create()之前(如果有的话)设断点,然后单步到窗体的创建代码中。在这时确认一下是否是你所认为的那个单元。

最后一个办法,就是不管三七二十几了,你在项目管理器中(Ctrl+Alt+F11)中,删除掉这个单元,存盘退出,然后再添加一次。
 
Debug Option->Integrated Debugging钩上
 
是设置的问题
Debug Option->Integrated Debugging钩上
 
to Taiji02 : 一个弱智的问题 -- 虽然是一个弱智的问题,但你也解决不了啊!所以以后不要废话了!

to ghc_x,qian0303,lishding,aimingoo :
你们的方法,我都测试过,不行!

看来有可能解决不了,如果这个星期五还没有解决,我将结掉此贴!
 
有沒有在其他電腦上試過?對比一下看看是否你現在的電腦上DELPHI有點問題了。
 
要不你把你的工程放在网上让大家下载调试看看是什么问题,你可以删掉大部分代码,只要让问题还存在就行。
 
你最好在别的机子上先试一下,如果仍然有问题,大家再讨论解决办法,如果别的机子上没有问题,那就重装Delphi。如果试机子的问题,大家就别再费劲了[:)]
 
楼上说的有道理!
 
晕倒 还要等到周5啊?
 

向回复100进军
 
to ghc_x,: 我是来提问的,不是来发布源码,如果发出来,我可吃不了兜着走啊

to: ALL :别的机器上测试同样的问题!
 
遇到过,不过是D7,一般都是无效代码,偶尔是因为机器速度太慢了引起的,楼主的情况还没有遇到过。
 
打开工程后,选择project菜单里的build project试试。不行我也没招了。
 
对呀,你拷贝进去是没有点的。
然后你试着编译看看没有?有没有蓝点?

你把出问题的代码红我。我解决后发给你。只要最前面最早没有蓝点的一段出问题的部份发给我。

还有一个解办法,你试试用CVS来帮你检查你的文件类型。看看CVS自动帮你判断的类是是ASCII码文件还是二进制文件,如果是二进制文件则是你的文件中有我的这种情况。
 
to : 智利 : 我的QQ 28261363 跟我联系,我把该单元发给你
CVS 是什么软件,我没有用过

to: All 机器速度问题,应该不会,build project N 遍了 :(
 
CVS是原碼管理的軟件,不錯的,試試。
看來這個問題還有待把原碼給別人試試,呵呵
你什麼邊沒有高手看看嗎?
 
希望你好好看一下aimingoo的发言,我也觉得只有这两种原因了,并且我想你没有用到这个窗体的可能性很大,再看看你何处真正创建了这个窗体?
 

Similar threads

回复
0
查看
820
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部