gpt4 book ai didi

.net - 调试.net进程时如何找到LastError的值?

转载 作者:行者123 更新时间:2023-12-04 22:26:20 33 4
gpt4 key购买 nike

我从使用互操作调用 win32 api 函数的 .net 进程中得到一个异常。
我有一个调试器,我想查看 LastError 的值。
是否可以从 Visual Studio 调试器中查看 LastError 的值?

两个注意事项:抛出异常的进程不是我的,我无法修改它的源代码来获取LastError的值。
我正在使用 Visual Studio 2010 的测试版,我假设适用于 VS 2008 的解决方案适用于 2010。

谢谢。

最佳答案

您可以调用Marshal.GetLastWin32Error()获取最后一条 Windows API 错误消息。这是建议的方法(与使用 P/Invoke 不同)。

来自文档:“GetLastWin32Error 从 Kernel32.DLL 公开 Win32 GetLastError API 方法。此方法存在是因为直接平台调用 GetLastError 来获取此信息是不安全的。如果您想访问此错误代码,您必须调用 GetLastWin32Error 而不是为 GetLastError 编写自己的平台调用定义并调用它。公共(public)语言运行时可以对覆盖操作系统维护的 GetLastError 的 API 进行内部调用。”

另外,在不修改源方面:

如果 P/Invoke 调用用 DllImportAttribute.SetLastError 修饰,这将在 Visual Studio 即时窗口中工作。 .但是,如果对 Windows API 的 P/Invoke 调用缺少该属性,那么您会有些不走运,因为编码 api 很可能会在您看到之前覆盖 GetLastError 中的值。

关于.net - 调试.net进程时如何找到LastError的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/899075/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com