Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 8382|回复: 10

問個 debug 的問題

[复制链接]

该用户从未签到

发表于 2009-7-16 16:49:06 | 显示全部楼层 |阅读模式
我想問一下,在 run program 的時候,
整個程序就只出現一條橙色線,然後就不能動了,
也沒有顯示什麼 error messages,這是什麼原因呢 ?
先說聲謝謝;
回复

使用道具 举报

该用户从未签到

发表于 2009-7-16 23:25:00 | 显示全部楼层
你能截个图上来看看吗?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-7-17 15:55:01 | 显示全部楼层

回 1楼(猫工) 的帖子

  1. Main Unit source code ...
  2. ------------------------------
  3. unit MainUnit;
  4. {$mode objfpc}{$H+}
  5. interface
  6. uses
  7.   Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  8.   Process, StdCtrls;
  9. const
  10.   READ_BYTES = 2048;
  11. type
  12.   { TMyThread }
  13.   TMyThread = class(TThread)
  14.   private
  15.     //fStatusText: string;
  16.     procedure ShowStatus;
  17.   protected
  18.     procedure Execute; override;
  19.   public
  20.     constructor Create(CreateSuspended: boolean);
  21.   end;
  22.   { TForm1 }
  23.   TForm1 = class(TForm)
  24.     Edit1   : TEdit;
  25.     Memo1   : TMemo;
  26.     Process1: TProcess;
  27.     procedure FormCreate(Sender: TObject);
  28.   private
  29.   public
  30.   end;
  31. var
  32.   Form1: TForm1;
  33.   M : TMemoryStream;
  34.   n : LongInt;
  35.   BytesRead : LongInt;
  36. implementation
  37. { TForm1 }
  38. procedure TForm1.FormCreate(Sender: TObject);
  39. var
  40.   MyThread : TMyThread;
  41.     S       : TStringList;
  42. begin
  43.   M := TMemoryStream.Create;
  44.   S := TStringList.Create;
  45.   BytesRead := 0;
  46.   MyThread := TMyThread.Create(True);
  47.   // With the True parameter it doesn't start automatically
  48.   //MyThread := TMyThread.Create(False);
  49.   if Assigned(MyThread.FatalException) then
  50.     raise MyThread.FatalException;
  51.   // Here the code initialises anything required before the threads starts executing
  52.   MyThread.Resume;
  53.   //Sleep(20000);
  54.   while Process1.Running do
  55.   begin
  56.     M.SetSize(BytesRead+READ_BYTES);
  57.     n := Process1.Output.Read((M.Memory+BytesRead)^, READ_BYTES);
  58.     if n > 0 then
  59.      begin
  60.           Inc(BytesRead, n);
  61.      end
  62.     else
  63.      begin
  64.           Sleep(100);
  65.      end;
  66.   end; {
  67.      repeat
  68.       M.SetSize(BytesRead + READ_BYTES);
  69.       n := Process1.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
  70.       if n > 0 then
  71.        begin
  72.         Inc(BytesRead, n);
  73.        end;
  74.      until n <= 0; }
  75.      if BytesRead > 0 then WriteLn;
  76.      M.SetSize(BytesRead);
  77.      S.LoadFromStream(M);
  78.      S.Free;
  79.      M.Free;
  80.   end;
  81.   //Edit1.Text:='AAAAA';
  82.   //Sleep(20000);
  83. end;
  84. { TMyThread }
  85. procedure TMyThread.ShowStatus;
  86. // this method is only called by Synchronize(@ShowStatus) and therefore
  87. // executed by the main thread
  88. // The main thread can access GUI elements, for example Form1.Caption.
  89. begin
  90.   //Form1.Caption := fStatusText;
  91.   Form1.Process1 := TProcess.Create(nil);
  92.   {$IFDEF WIN32}
  93.   Form1.Process1.CommandLine :=  'D:\\MyDOCU\\Work\\xxxxx';
  94.   {$ENDIF}
  95.   Form1.Process1.Options := Form1.Process1.Options + [poWaitOnExit];
  96.   Form1.Process1.Execute;
  97.   Form1.Process1.Free;
  98. end;
  99. procedure TMyThread.Execute;
  100. //var
  101.   //newStatus : string;
  102. begin
  103.   //fStatusText := 'TMyThread Starting...';
  104.   Synchronize(@Showstatus);
  105.   //fStatusText := 'TMyThread Running...';
  106.   //Process1 := TProcess.Create(nil);
  107.   //Process1.CommandLine :=  'D:\\MyDOCU\\Work\\xxxxx';
  108.   //Process1.Options := Process1.Options + [poWaitOnExit, poUsePipes];
  109.   //Process1.Execute;
  110.   //Process1.Free;
  111.   {
  112.   while (not Terminated) and (true any condition required) do begin
  113.     //here goes the code of the main thread loop
  114.     newStatus:='TMyThread Time: '+FormatDateTime('YYYY-MM-DD HH:NN:SS',Now);
  115.      
  116.     if NewStatus <> fStatusText then begin
  117.       fStatusText := newStatus;
  118.       Synchronize(@Showstatus);
  119.     end;
  120.   end;
  121.   }
  122.   //Synchronize(@Showstatus);
  123. end;
  124. constructor TMyThread.Create(CreateSuspended: boolean);
  125. begin
  126.   FreeOnTerminate := True;
  127.   inherited Create(CreateSuspended);
  128. end;
  129. initialization
  130.   {$I mainunit.lrs}
  131. end.
  132. -------------------------------------------
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-7-17 16:11:04 | 显示全部楼层
如圖,run program 的結果,
就是這樣一條橙色線而已。。。。。

沒有什麼 error messages ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-7-17 16:40:46 | 显示全部楼层

从lazarus的Options里可以看得到(如上图),这个颜色是意思是:Error line

我是这么写的,可以通过:

游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-7-20 18:49:59 | 显示全部楼层
问题解决了么?

顺便提一句(好像跟这个问题无关),有一个常见的问题是,调试器一运行就碰到 sigsegv。
我看到一个解决方法:如果安装了 COMODO Internet Security 的话,先卸载,然后重新安装,并且安装的时候选择不安装 Defense+。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-7-23 15:21:59 | 显示全部楼层
嗯,DataList 的 問題解決了,
只是有點不明白的是,

我這樣宣告時 S: TSTringList,
"不"能 work.

But 只是換了一個名稱,DataList: TStringList,
卻可以 work 了,
(debug 可以過)

有這個不解的地方;
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-7-24 14:36:03 | 显示全部楼层
能把原來有問題的那個 project 照原樣打包傳上來嗎?
我也想知道為什么會那樣。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-7-28 20:27:16 | 显示全部楼层
only source codes ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-7-28 23:50:54 | 显示全部楼层
果然是这样。。。

S 後面那个不是空格。

  

建议你写代码的时候别用 Unicode,哪怕是 UTF8。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 04:49 , Processed in 0.086568 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表