【发布时间】:2015-04-12 16:52:42
【问题描述】:
我是否可以为基于 Delphi 的 EXE 启用任何日志记录/跟踪工具,而无需访问 Delphi 代码,只需要编译的 EXE 和相关的 DLL?
这就是我需要它的原因:我们的 Windows 2012 远程桌面服务器(以前称为终端服务器)的一些用户会定期遇到 C0000006 外部异常错误,但仅适用于从共享位置访问的基于 Delphi 的第三方应用程序在网络上(即不是 RDS 服务器的本地)。办公室中的本地 PC 用户以相同的方式访问相同的文件没有问题。如果将EXE复制到RDS服务器,RDS用户不会遇到问题;然而,由于应用程序的一些限制,这只是一个测试,而不是解决方案。
这是关键:它只发生在 Mac 上运行的 RDS 客户端(大约 6 个用户),而不是 Windows RDS 客户端(大约 15 个用户)。
我已经在 MS 终端服务器论坛上发布了一个详细但尚未回答的问题。我的研究表明,这种行为并不是什么新鲜事。
- Windows 2000 修复了一个问题,该问题与 Windows 混淆了哪个客户端会话打开了特定程序有关。
- 即使在最近的 Windows 2008 中,RDS 上也存在特定于 Delphi 的网络访问问题,这与它按需加载部分 EXE/DLL 的方式有关,而不是在打开应用程序时加载。我推断,虽然症状相同,但根本原因肯定有所不同。
因此,在等待第三方开发人员的预测时,我正在尝试找出是否有任何方法可以设置活动跟踪,无论是特定于 Delphi 的,还是可能与网络相关的,都可以告诉我特定会话访问特定网络文件的时刻。这至少可以帮助我识别与用户遇到错误的时刻相关的事件。
【问题讨论】:
-
AFAIK,如果 EXE 是在
release模式下构建的,那么调试信息很可能没有用它编译。虽然可能有一些我不知道的神奇工具可以进入那种类型的细节,但可能是在组装级别。即使 EXE 确实包含调试信息,如果不只是在调试模式下运行原始源代码,实际执行调试仍然很困难。除非您知道汇编,否则最佳选择是调试原始源代码。当然,除非应用程序是用记录器设计的,在这种情况下这是另一回事。 -
如果您对监控文件或 I/O 访问感兴趣,那么我强烈建议您尝试使用 Sysinternals (technet.microsoft.com/en-us/sysinternals/bb896645.aspx) 的 Prcoess Monitor。现在我必须承认我还没有尝试在 RDS 客户端上使用它,但我仍然认为它应该可以工作。