如何得到当前执行的语句在源代码中的行数?
在程序执行中,我想写入日志,记录当前发生的情况,同时我也想记录下来,自身这条语句在源代码中的行数,以便于查错时快速定位;
问题点数: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 语句




