阅读:3507回复:6
一个程序,直接运行和调试运行都有什么区别?
一个多媒体播放程序(Delphi 编写),直接运行 exe 文件时,当播放 Real 格式的文件,在特定的操作下,会产生一个无效地址访问错误。我可以准确地将该错误重现。
经查,该错误是由 ATRC.DLL (Ver 10.0.0.703) 引起的,这是 Real 的一个 AC3 音频解码器。 但是,如果在 Delphi 的 IDE 中运行程序,或者用 VC 打开该 exe 文件,再运行,将不会有任何错误产生。 虽然,我已经知道了问题出在 ATRC.DLL 本身(更新为 10.0.0.1263 就没有问题了)。 我的问题是:为什么在调试运行的时候,就没有任何错误产生? (另备专家分) |
|
|
沙发#
发布于:2004-12-14 19:30
帮你顶!
|
|
板凳#
发布于:2004-12-14 19:40
不太清楚你做的是什么东西,不过调试运行和直接运行一般来说差别仅仅是时间上的问题,如果版本相同的话。那么问题可能就出在多线程上。
|
|
地板#
发布于:2004-12-15 08:59
程序播放时使用的是 Delphi 的 TMediaPlayer 组件,该组件的源码我看了,应该是通过 Windows 的 MCI 进行播放的。Windows 在播放时通过了 DirectShow,DirectShow 在播放 Real 文件时用到了 ATRC.DLL。
所以想不明白,即便是调试程序,怎么对 ATRC.DLL 产生的影响。 |
|
|
地下室#
发布于:2004-12-15 11:47
估计应该是地址锁存和释放的时间差问题上,调试时,调试器会把一些调试码加入到程序中一起运行,这就延缓了程序的某些位置的运行连续,造成一定的线程延时,也就使线程访问同一地址的操作得以错开,也就没了地址访问错误
|
|
5楼#
发布于:2004-12-15 12:33
这个,我也遇见过
估计,和多线程有关 但是,也不能肯定 现象,就是调试的时候是好的 |
|
|
6楼#
发布于:2004-12-17 14:54
先把分放了。
如果另有答案,另开贴给分。 |
|
|