【发布时间】:2015-03-25 09:12:28
【问题描述】:
我要解决的问题:我的程序使用System.Win.ScktComp.TServerSocket 通过以太网与另一个本地进程通信。从本地进程接收数据包和发送响应之间是 100 毫秒——这不应该花这么长时间。我正在尝试使用调试器单步执行我的程序,以查看这 100 毫秒的花费。
问题是,如果我在调试器中获取当前时间,它显然会计算它在调试器暂停状态下花费的时间。另一个问题是我的应用程序的相关部分是TTimer 并且是事件驱动的,因此当例程返回时,您不确定接下来会调用哪个例程。
我的尝试:我可以放弃在任何地方使用调试器和print当前时间,例如在所有OnTimer过程和其他事件中。
更好的解决方案: 逐步调试调试器,获取 CPU 时间(不受在调试器中暂停所用时间的影响)以确定 100 毫秒丢失的位置.
【问题讨论】:
-
不,尝试在调试时为您的应用计时不会产生有意义的结果。使用分析器或一些日志记录代码对此进行检测。
-
我会试试 procmon。启动 Procmon,启动您的应用程序,执行您的操作,停止 procmon,打开工具 -> 堆栈摘要并深入了解您的应用程序。 (在过滤器菜单中启用高级输出) 如果这还不够精细,您可以使用WPA (尽管学习曲线更陡峭)
-
由于您使用的是 Delphi XE2,因此您可以访问一些 CodeSite 日志记录,通过计时来实现它,它对您的运行时间的影响应该可以忽略不计。这样,您还可以在需要时查看所有输出的更多信息
-
使用System.Diagnostics.TStopWatch 高级记录来衡量时间。通过 OutputDebugString 输出到日志系统。
-
你可以做到,但我怀疑它会给你带来很好的结果。随意按照您喜欢的方式进行操作。我个人会使用仪器和日志记录。如果您希望在单步调试器中手动执行此操作,那完全取决于您。
标签: delphi debugging time delphi-xe2