一个怪问题(200分)

Y

yuans

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题并不是Delphi独有的:我想记录一个Pascal
程序的执行过程中的语句顺序,比如一个程序有10句,
执行过程为1、4、5、6、4、5、6、10,退出。现我想
通过执行自动获得这些源代码的行号,如何?
我只知道古老的basic中有trace on功能,执行的同时
可以显示行号,可Delphi...
此问题够怪吧,我把所有的积分都拿出来了。:(
 
D

dwwang

Unregistered / Unconfirmed
GUEST, unregistred user!
以我的意见,可能性不太大,编译语言的可执行代码
与源代码不完全是一一对应的,除非Delphi内置这种
功能,如同单步跟踪程序的执行,否则外部工具和自己
编写的程序都不太可能做到这一点。

Basic有此功能恰恰因为他是解释语言。
 
H

huizhang

Unregistered / Unconfirmed
GUEST, unregistred user!
正如dwwang所说, 因为Delphi不是解释语言, 不可能自动跟踪执行序列, 特别是面向
对象技术, 程序中的每一个动作都牵涉到一系列的内部活动。

但是如果你只是想跟踪自己的一段代码还是不难实现的。可以建立两个数组,一个
字符串数组用来存放你的语句,另外一个整数组存放他们的执行顺序,每次执行到某
一个语句时就做一个记录。这样做也只能记录语句部分,不能记录说明部分。

我很想知道你这个“怪”想法从何尔来,而且你不惜拿出一个天文数字来作为奖励。
其意义何在?我想你一定有原因,如不介意的话能否告知。如果确实有必要的话,我
们大家可以共同探讨,弄它一个水落石出。否则,建议你还是省下点积分,干点有意义的事吧。
 
P

pegasus

Unregistered / Unconfirmed
GUEST, unregistred user!
一个简单的方法: 您可以自己做一个宏, (用Word或者VisualBasic), 控制Delphi的集成环境单步执行程序, 并从相应的地
方得到文件名和行号. 但是这个方法可能会影响您的程序的正常执行(比如你的程序是个绘图程序, 需要自己处理Paint消息).

当然最完善的办法是您自己做一个调试器, 单步执行程序, 根据编译器的调试信息输出执行时的行号.

 
Z

zw70

Unregistered / Unconfirmed
GUEST, unregistred user!
我想一个很小的可能是等待 Inprise 在其 Delphi未来的
版本中对调试器加以改进 已实现这一功能.
 

小乘佛法

Unregistered / Unconfirmed
GUEST, unregistred user!
作一个窗口,
将你要调试的部分每句都加上PostMessage函数,
在窗口中截取消息并显示出来,哈哈,有点土
 
P

pegasus

Unregistered / Unconfirmed
GUEST, unregistred user!
>我想一个很小的可能是等待 Inprise 在其 Delphi未来的
>版本中对调试器加以改进 已实现这一功能.
Inprise不可能在这个问题上化功夫的, :)
 
H

hfade

Unregistered / Unconfirmed
GUEST, unregistred user!
将你要调试的部分每句都加上OutputDebugString函数,
这样在delphi4的event log 窗口中就能看到每句
话的执行过程.
 
Y

yuans

Unregistered / Unconfirmed
GUEST, unregistred user!
感谢大家的帮助. 我这样做的原因想做一个简单的演示系统.

如果给一个程序便能纪录下来运行过程,那么演示系统有了这个过
程的纪录就可以模拟它的运行. 待演示的程序都很简单,所以前面
几位的建议估计都可行.我可能会用一个更土的方法,但原理差不多.

拿出全部积分确实让我后悔了,当我想问下一个问题时发现手头的
几分实在是拿不出手.
 
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
yuans,200分现在是拿不回了,您想把200分给谁呢?
 
H

huizhang

Unregistered / Unconfirmed
GUEST, unregistred user!
200 分给我,我风光两天后全部返回,决不食言。
 
Y

yuans

Unregistered / Unconfirmed
GUEST, unregistred user!
我记得有规则说可以给多个回答问题的人以积分,
我一会儿就给master发封信问问。谁多谁少我就
看着办了,反正是拿不回来了,因为对于Delphi
我是个layman。
 
C

cpp

Unregistered / Unconfirmed
GUEST, unregistred user!
演示程序当然得用LOTUS SCREENCAM,用这些笨着干什么?
 
Y

yuans

Unregistered / Unconfirmed
GUEST, unregistred user!
faint. 演示程序的范围大了, camera怎会够用?
(积分分布已经寄给了master,再回答也没分了,:(
有兴趣的还可在master check前继续讨论)
 
顶部