CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何得到当前执行的语句在源代码中的行数?

楼主mycode(不写代码)2001-06-03 13:16:00 在 Delphi / VCL组件开发及应用 提问

在程序执行中,我想写入日志,记录当前发生的情况,同时我也想记录下来,自身这条语句在源代码中的行数,以便于查错时快速定位;  
  问题点数:50、回复次数:30Top

1 楼clacklin(海风)回复于 2001-06-03 14:38:00 得分 0

呵呵,如果程序本身知道自己每个语句所处的行数,你想,这编译好的程序要有多少资源来保存这些数据?每个程序里的无用代码也会变得很多了。  
  不可能的!!!!Top

2 楼mycode(不写代码)回复于 2001-06-03 15:03:00 得分 0

如果是在调试状下,再多的资源消耗也没有关系;所以还是有可能的;好象VC就可以支持,所以才会上Delphi来问?Top

3 楼stella53(慕蓉云风)回复于 2001-06-03 15:18:00 得分 1

AssertTop

4 楼mycode(不写代码)回复于 2001-06-03 15:42:00 得分 0

Assert在Delphi好象没有这个效果;请详细解述.Top

5 楼mycode(不写代码)回复于 2001-06-03 19:12:00 得分 0

期望有人来解说Top

6 楼Asus(风月无边)回复于 2001-06-03 21:13:00 得分 0

gzTop

7 楼mycode(不写代码)回复于 2001-06-03 23:21:00 得分 0

gzTop

8 楼Kingron(单身走我路……)回复于 2001-06-04 08:01:00 得分 0

好像可以,只要包含调试信息就可以乐,不过一个简单的程序,包含调试信息之后就会大很多(288-->1.4M)???????Top

9 楼mycode(不写代码)回复于 2001-06-04 12:17:00 得分 0

to:Kingron(WinAPI)  
      请详细说明一下?Top

10 楼windindance(风舞轻扬·白首为功名)回复于 2001-06-04 12:30:00 得分 0

to:Kingron(WinAPI):  
      C里是支持的(在#define   __LINE__),但DELPHI中好象不支持吧?因为DELPHI不支持宏调用。Top

11 楼mycode(不写代码)回复于 2001-06-04 19:38:00 得分 0

版主,来看一看,给一个结论吧;行还是不行!Top

12 楼Kingron(单身走我路……)回复于 2001-06-04 19:46:00 得分 0

应该行的,我昨天在看Exe文件的格式的时候,里面就说乐,如果包含调试信息可以包含行信息.但是具体的怎么做我也不知道~~~~~~~~~Top

13 楼mycode(不写代码)回复于 2001-06-05 15:34:00 得分 0

谁来找到它?Top

14 楼mycode(不写代码)回复于 2001-06-06 11:34:00 得分 0

听说一个叫numega公司开发的产品,调试功能很强大;哪位知道?Top

15 楼mycode(不写代码)回复于 2001-06-07 15:45:00 得分 0

听说一个叫numega公司开发的产品,调试功能很强大;哪位知道?      
  Top

16 楼c_hk(小李抢刀)回复于 2001-06-07 15:59:00 得分 0

观望Top

17 楼c_hk(小李抢刀)回复于 2001-06-07 16:44:00 得分 0

唔.....Top

18 楼mycode(不写代码)回复于 2001-06-08 12:25:00 得分 0

还有人来说一说吗?Top

19 楼mycode(不写代码)回复于 2001-06-09 12:32:00 得分 0

唔...Top

20 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-06-09 12:47:00 得分 2

没有必要大动干戈  
  try  
      {}  
  except  
      {保存当前的错误地址}  
  end;  
   
  //test  
  const  
      cErrLogFile   =   'ErrAddr.log';  
  begin  
      try  
          Query1.Close;  
          Query1.SQL.Text   :=   Edit1.Text;  
      except  
          with   TStringList.Create   do   try  
              if   FileExists(cErrLogFile)   then   LoadFromFile(cErrLogFile);  
              Add('<XGUIDX>'{Shift+Ctrl+G}   +   FormatDateTime('YYYY-MM-DD   HH:NN:SS',   NOW));  
              SaveToFile(cErrLogFile);  
          finally  
              Free;  
          end;  
  end;  
   
  //出错的时候你可以在代码中查<XGUIDX>Top

21 楼zswang(伴水清清)(专家门诊清洁工)回复于 2001-06-09 12:51:00 得分 0

你是不是看角本程序看多了  
  如果你想研究一下怎样控制Delphi   IDE  
  请关注我发的帖子Top

22 楼mycode(不写代码)回复于 2001-06-10 13:33:00 得分 0

如果按zswang(zs)的方法去做,对一个几万行甚至十几万行的程序,估计可能性不大;  
  排错的工作量和难度也加大了不少;  
   
  无论如何感谢zswang(zs);  
  Top

23 楼songlichao()回复于 2001-06-10 15:20:00 得分 0

gzTop

24 楼mycode(不写代码)回复于 2001-06-17 23:54:00 得分 0

还想得到更好的回答!Top

25 楼windindance(风舞轻扬·白首为功名)回复于 2001-06-18 18:18:00 得分 0

用BCB就有了。  
  define   CODELINE   __LINE__Top

26 楼mycode(不写代码)回复于 2001-06-19 03:10:00 得分 0

Delphi的是什么?Top

27 楼warrior(不断领悟)回复于 2001-06-19 08:08:00 得分 0

理论上可以这么做:  
  编一个汇编过程,在需要调试的地方调用它。  
  在过程中取调用者的返回地址,并记录。  
  DELPHI的IDE支持通过指令地址查找语句。  
  Top

28 楼pipai(我是P派)回复于 2001-06-19 09:26:00 得分 0

Assert可以,只是必须把project--options--compiler--debugging--Assertions选中,  
  你可以在程序用下面语句测试:  
      Assert(   false,   'test');  
  Top

29 楼pipai(我是P派)回复于 2001-06-19 09:51:00 得分 47

如果你只是想记录行号、文件名信息,在设置Assertions选项的基础上,采用如下方法:  
  Procedure   RecordFileNameAndLineNum(   Const   errmsg   :   String   );  
  Var   psFileName,   peFileName     :   Integer;  
          psLineNum   ,   peLineNum       :   Integer;  
          strFileName,   strLineNum   :   String;  
  Begin  
      psFilename   :=   Pos(   '(',   errmsg   );  
      Inc(   psFileName   );  
      peFileName   :=   Pos(   ',',   errmsg   );  
      strFileName:=   Copy(   errMsg,   psFileName,   peFileName-psFileName   );  
      psLineNum     :=   Pos(   'line   ',   errmsg   );  
      psLineNum   :=   psLineNum   +   5;  
      peLineNum     :=   Pos(   ')',   errmsg   );  
      strLineNum   :=   Copy(   errMsg,   psLineNum,     peLineNum-psLineNum   );  
      //记录   strFileName   和   strLineNum  
  End;  
   
  在需要记录文件名和行号的地方,如下:  
      Try  
          Assert(   false   );  
      Except  
          On   E   :   EAssertionFailed   Do  
                RecordFileNameAndLineNum(   E.message   );  
      End;  
  Top

30 楼mycode(不写代码)回复于 2001-06-23 13:44:00 得分 0

好办法,好主意!  
  Top

相关问题

  • 存储过程中,要用到游标的话是不是不可以用EXECUTE执行SQL语句,帮我看一下源代码!
  • VC 程序中,如何用ORACLE 的OCI 接口(oci.h)与数据库建立连接, 并执行SQL 语句,谁有源代码?EMAIL: liyirong7418@sohu.com 愿意高分相
  • 我想用多线程同时执行一条语句十次,比如:Function();该怎么做呢?希望能给出源代码啊!谢谢了!
  • 不用webbrowser得到网页源代码
  • 这两条简单的SQL语句有什么不同吗?(附源代码)
  • 如何得到sql语句执行后的信息?
  • 怎样能得到dw最近一次执行的sql语句?
  • 执行sql语句怎样得到影响的记录数
  • 如何得到某个语句的执行时间。
  • 如何得到 conn.prepareStatement 最终执行的sql 语句

关键词

  • 语句
  • delphi
  • 信息
  • pslinenum
  • psfilename
  • cerrlogfile
  • 调试
  • errmsg
  • pefilename
  • pelinenum

得分解答快速导航

  • 帖主:mycode
  • stella53
  • zswang
  • pipai

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo