Board logo

Subject: 发现MSDN专家设置的一个bug [Print This Page]

Author: crazycock    Time: 2007-12-12 11:04     Subject: 发现MSDN专家设置的一个bug

首先表达一下对CnWizards的赞美,这个工具实在是太太太、太好用了!一直都在用它。

我的机器是WinXP+D7,有一个版本曾经不太稳定,后来保持一个低版本很久了,昨天发现升级到RC2了,还增加了梦寐以求的begin..end匹配,非常高兴。但是发现以前不能用的MSDN专家还是不能用,于是打开了一份以前的代码cnwizards_0.8.1.252_src,看了一下里面的代码,发现了一个导致我不能正确使用MSDN专家的bug,这个bug应该现在还存在,因为RC2里面我还遇到这个问题。

我的机器上查看到的MSDN列表为如下:

MSDN Library - Visual Studio 6.0
Visual Studio .NET Combined Help Collection
MSDN Library for Visual Studio 2005 CHS

我选择第一个,其实就是MSDN98,但是程序中的代码如下:

function TCnMsdnWizard.IsSelectOldMsdn(SelectedText: string): Boolean;
var
  MsdnInfo: TCnMsdnInfo;
  i: Integer;
begin
  Result := False;

  for i := 0 to FMsdnList.Count - 1 do
  begin
    MsdnInfo := TCnMsdnInfo(FMsdnList.Items);
    if MsdnInfo.FCaption = SelectedText then
    begin
//      if AnsiContainsText(SelectedText, 'Visual Studio 6.0') and
//        AnsiContainsText(SelectedText, SMsdnLibrary) then // Msdn 98
//      begin
//        Result := True;
//        Break;
//      end;    屏蔽的代码为自己加的,以解决这个问题。
      if AnsiContainsText(SelectedText, '2000') and
        AnsiContainsText(SelectedText, SMsdnLibrary) then // Msdn 2000
      begin
        Result := True;
        Break;
      end;
    end;
  end;
end;很显然,返回的是False,于是调用RunMsdnDotNet,就错了。

另外,我的机器如果选择MSDN2005的话,会提示“连接服务程序异常”,好像是DExplore里面的问题,还没有细看代码,如果有朋友也遇到过类似问题,麻烦指点我一下,以便少走弯路。

[ 本帖最后由 crazycock 于 2007-12-12 11:10 编辑 ]
Author: crazycock    Time: 2007-12-12 11:23

另外咨询一个问题,我一直都是用CnDebugger来输出信息来调试的,不知道有没有办法直接运行进行单步的?我试了一次好像会有错误的。
Author: crazycock    Time: 2007-12-12 11:57

经过调试,发现问题的根源

procedure TDExploreAppObj.Connect;
var
  punk: IUnknown;
begin
  if FIntf = nil then
  begin
    punk := GetServer;    // <-------这句话发生了异常
    ConnectEvents(punk);
    Fintf:= punk as Help;
  end;
end;

GetServer里面用的是ckRunningOrNew模式,发现FServerData对象好像都不可用,没有初始化。
Author: Passion    Time: 2007-12-13 08:57

非常感谢您的报告和修正,我们会检查的。

关于单步调试问题,请参考网站上的专家包调试说明书。http://www.cnpack.org 的文档中心里头的IDE专家包分类里头有。
Author: crazycock    Time: 2007-12-13 10:44

谢谢老大的指点。想问个问题,CnWizards出来后,Delphi7变得非常好用了,但是和vc比起来,有一个问题一直没有好的解决途径,就是如何方便浏览内存某个地址?在VC中,Alt+6很容易就可以打开Memory调试窗口,Watch窗口可以查看变量或者数组的内存地址,在Memory中可以直接看这段地址的内容,但是在Delphi7里面我一直没有找到好的相关的方法,只能通过查看CPU,然后跳到变量地址,然后再跳到变量指向的内存地址,很麻烦。不知道大家怎么做的?
Author: Passion    Time: 2007-12-13 23:55

Delphi里头确实没有太方便的方法,除了打开CPU窗口看内存。
Author: Passion    Time: 2007-12-14 12:16

我们已经参照您的代码,修改了MSDN专家中关于98部分的判断。等CnWizards 0.8.2.352的每日构建版出来,烦请下载验证一下?
Author: Passion    Time: 2007-12-15 13:36

352版已出,烦请下载验证是否支持MSDN 98?

http://www.cnpack.org/downbuilds.php?lang=zh-cn
Author: kendling    Time: 2007-12-19 13:44

老大真迅速。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0