【问题标题】:Delphi: how to debug Windows Authentication related issues?Delphi:如何调试 Windows 身份验证相关问题?
【发布时间】:2011-04-12 09:48:10
【问题描述】:

我注意到客户端存在无法重现的错误。它 99% 与 MS SQL Server windows 身份验证相关联。

当涉及到 Windows 身份验证时,如何调试应用程序?

是否可以(如果可以)使用远程调试器(我从未尝试过)?

作为替代方案,我可以进行特殊构建,将错误记录在文件中。

【问题讨论】:

  • 记录错误是个好主意。
  • 您需要先记录错误。然后,使用该错误消息或异常堆栈跟踪,您可以尝试 google 或在此处发布。然后,有些人可能会告诉您在哪里查看它。
  • 始终可以调试应用程序。但是,如果错误超出了您的代码范围,您可能很难确定它。如果没有任何关于该错误的提示,就不可能为您指明正确的方向。

标签: sql-server delphi windows-authentication remote-debugging


【解决方案1】:

始终使用完整的堆栈跟踪记录您的错误,以便准确了解错误发生的位置。您可以使用 MadExcept 之类的东西,它使用户能够在发生错误时向您发送包含所有相关数据的错误日志。

在调试 windows API 错误时,唯一的相关信息是 API 本身返回的 API 返回码,或者您可以通过 GetLastError 函数获取它。成功通常为零(但不总是)并且错误一些正整数 (DWORD) 代码。看看 MSDN 是什么意思。你从那里继续。我很确定仅返回错误代码本身就会为您提供足够的信息(以及您的堆栈跟踪等......)关于什么是错误的。

如果不是,则需要进行更详细的分析。然后,您可以尝试复制用户环境或远程调试应用程序。

请注意,Windows API 不会引发异常。如果您觉得有必要,您有责任自行检查返回码并引发异常。它是一种老式的“C 函数类型”编程。

编辑:

如果您正在寻找一个简单且免费的解决方案,您可以查看SimpleLog,这是我自己的日志记录解决方案。但是 MadExcept 要好得多,并且有很多不同的选择。

【讨论】:

  • madexcept 并非免费用于商业用途。替代方法是使用 JCL wiki.delphi-jedi.org/wiki/JCL_Help:Debugging.Stackinforoutines
  • 如果您销售的是商业软件,那么您买得起madExcept!
  • 我同意大卫的观点。与节省的费用相比,这应该是最低的成本。如果您想要一个简单且免费的解决方案,您可以查看我的 SimpleLog。它基于 JCL 并简化了日志。但我一开始不想写它,因为 MadExcept 更好。我将为那些寻求商业用途的免费解决方案的人更新答案。即使在那里(免费代码)我确信存在更好(更丰富)的解决方案,但我不知道有任何解决方案。
  • 好的,我会考虑 MadExcept。正如您所说,它是一个商业应用程序,我购买 MADExcept 的成本要低得多,正如 David 所建议的那样。这种“盲虫”确实是个问题。我不时地经历它们,而且我总是受苦。
【解决方案2】:

您可以使用远程调试器来调试在与 IDE 不同的主机上运行的应用程序,但它需要:

  • 远程调试器安装在目标机器上
  • 目标机器上的调试版本和远程符号

如果您的客户允许该远程调试器是一个选项。恕我直言,最好有一些应用程序开关(命令行参数、注册表项等),以便在需要时详细记录登录错误(但要注意安全性)。

另一种选择是使用 OutputDebugStr,然后使用 SysInternals 的 DebugView 之类的工具来获取输出。还有一个单元可以将输出写入 SysInternal 的进程监视器。

【讨论】:

  • +1 感谢您提供的信息。当然,远程调试器是开销,客户不会让我轻易地做这样的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多