CnPack Forum


 
Subject: CnDebugViewer 怎么无法捕获 CnDebugger.logMsg输出 ?
李啸林
普通灌水员
Rank: 2



UID 2178
Digest Posts 1
Credits 77
Posts 28
点点分 77
Reading Access 10
Registered 2006-5-14
Status Offline
Post at 2012-6-24 17:29  Profile | Blog | P.M. 
CnDebugViewer 怎么无法捕获 CnDebugger.logMsg输出 ?

环境: Delphi XE2 + win7 (64位)

在单元中引用 CnDebug 单元,

代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
  CnDebugger.StartDebugViewer;
  CnDebugger.LogMsg('aaaa');
  OutputDebugString(PWideChar('xxxxxxxxxxxxxxxx'));
end;


结果, OutputDebugString的输出能够被 CnDebugViewer 捕获,而CnDebugger.LogMsg('aaaa') 却不能, 问题在那里啊 ?
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2012-6-24 18:25  Profile | Blog | P.M. 
Log系列方法需要在工程编译条件中定义DEBUG才有效,如果不想修改工程编译选项,可以用Trace系列方法,如TraceMsg。
Top
李啸林
普通灌水员
Rank: 2



UID 2178
Digest Posts 1
Credits 77
Posts 28
点点分 77
Reading Access 10
Registered 2006-5-14
Status Offline
Post at 2012-6-24 22:24  Profile | Blog | P.M. 
回复 #2 Passion 的帖子

谢谢老大的回复,可用Trace 方法也不行啊。

跟踪了一下,是因为下面这个过程,在我的电脑执行结果为False

function TCnMapFileChannel.CheckReady: Boolean;
begin
  Result := (FMap <> 0) and (FMapHeader <> nil) and (FQueueEvent <> 0);
  if not Result then
  begin
    FMap := OpenFileMapping(FILE_MAP_READ or FILE_MAP_WRITE, False, PChar(SCnDebugMapName));
    if FMap <> 0 then
    begin
      FMapHeader := MapViewOfFile(FMap, FILE_MAP_READ or FILE_MAP_WRITE, 0, 0, 0);
      if FMapHeader <> nil then
      begin
        FQueueEvent := OpenEvent(EVENT_MODIFY_STATE, False, PChar(SCnDebugQueueEventName));
        if (FQueueEvent <> 0) then
        begin
          UpdateFlush;
          Result := IsInitedFromHeader;
        end;
      end;
    end;
  end
  else // 区域都有效
    Result := PCnMapHeader(FMapHeader)^.MapEnabled = CnDebugMapEnabled;

  if not Result then
    DestroyHandles;
end;

在我的电脑上
   Result := (FMap <> 0) and (FMapHeader <> nil) and (FQueueEvent <> 0);  
    Result 返回值是 False
而且后面的这条语句
  FMap := OpenFileMapping(FILE_MAP_READ or FILE_MAP_WRITE, False, PChar(SCnDebugMapName));

执行后,FMap 的值为 0 。

因此整个 TCnMapFileChannel.CheckReady 的返回值为 False ,于是后面的GenerateMsgDesc过程就没有执行。

不明白为什么会 打开内存印象文件失败, 原因到那里去查找。
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6750
Posts 3551
点点分 6750
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2012-6-25 09:21  Profile | Blog | P.M. 
我们用的是Global前缀,是否权限问题?检查一下返回值看看。
Top
 




All times are GMT++8, the time now is 2024-3-4 13:58

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.007237 second(s), 9 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP