Delphi:如何调试Windows身份验证相关问题?

发布于 2024-10-31 18:06:32 字数 174 浏览 0 评论 0原文

我注意到客户端有一个我无法重现的错误。它 99% 与 MS SQL Server Windows 身份验证相关。

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

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

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

I noticed a bug at customer side that I cannot reproduce. It is 99% linked to MS SQL Server windows authentication.

How is it possible to debug an application when windows authentication is involved?

Is it possible (and if yes how) to use remote debugger (I never tried that)?

As an alternative I can do a special build that logs errors in a file.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

剩余の解释 2024-11-07 18:06:32

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

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

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

哦,请注意 Windows API 不会引发异常。您负责检查返回代码并在您认为需要时自行引发异常。它是一种老式的“C 函数类型”编程。

编辑:

如果您正在寻找简单且免费的解决方案,您可以查看 SimpleLog,我自己的日志记录解决方案。但 MadExcept 更好,并且充满了不同的选择。

Always log your errors with complete stack trace, to give you the idea exactly where the error happened. You can use something like MadExcept which enables the user to send you the error log with all relevant data appended when it happens.

When debugging windows API errors, the single relevant piece of information is the API return code that the API itself returns or you can get it via GetLastError function. Success is usually zero (but not always) and error some positive Integer (DWORD) code. Just look at MSDN what it means. You go on from there. I am pretty sure that just the return error code itself will give you enough info (along with your stack trace etc...) about what is wrong.

If not the more detailed analysis is needed. You can then try to replicate user enviromment or remote debug the app.

Oh and note that Windows APIs do not raise exceptions. You are responsible for checking the return code and raising the exception yourself if you feel the need to. It is an old style "C functional type" of programming.

EDIT:

If you are looking for a simple and free solution you can look at SimpleLog, a logging solution of my own. But MadExcept is way better and is full of different options.

姜生凉生 2024-11-07 18:06:32

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

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

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

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

You can use remote debugger to debug an application running on a different host than the IDE, but it requires:

  • Remote debugger installed on the target machine
  • A debug build and remote symbols on the target machine

If your customer allowd that remote debugger is an option. IMHO it is always a good idea to have some application switch (a command line parameter, a registry entry, etc.) that allows for loggin errors in detail when needed (beware of security, though).

Another options is to use OutputDebugStr and then use a tool like SysInternals' DebugView to get the output. There is also a unit to write output to SysInternal's Process Monitor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文