理想情况下,读者已将本机 C++ 程序升级到 Visual Studio 2008,其中包含一个 OpenClipboard() 块。为什么不尝试在从 OpenClipboard() 获得成功的返回码并单步执行代码之后设置断点。根据互联网,它可能适用于您的系统,但当然,不适用于我的系统,感谢您的尝试。
谷歌搜索例如 (( OpenClipboard 1418 vc6 )) 会发现诸如“GetClipboardData 在调试器中失败”和“在 VC++6 中没有错误但在 VC++2005 中出错”之类的文章。目前实用,问题已解决 - 我根本无法在此类代码中设置断点,我需要存储信息并在剪贴板操作完成后设置断点。错误 1418 是“线程没有打开剪贴板”,但只要您不使用 VS.NET,它就可以正常工作,或者就像我说的,如果您将断点保留在剪贴板打开关闭块之外。
知道 VS.NET 调试器的确切问题是什么,我会感觉更好。
作为一个 C++ 人,我只是模糊地意识到在做 dot-Net 时你不应该考虑线程。无论如何,当您单步通过本机 C++ 代码时,我没有找到真正发生的事情的大师级解释,事实上问题是否在于 dot-Net 调试器以某种方式巧妙地干扰了线程信息。
系统方面:大约一年前,两个双核 Xeon,根据 XP-pro 的 4 个 CPU。我刚刚通过在 XP-SP2-32 位下的 vc6 中单步调试代码。所以我知道代码在 vc6 下非常好。但是,当我使用 10 兆字节的 CF_TEXT 进行测试时,我遇到了异常。我想尝试在 XP-x64 更好的异常模型下调试。
用visual-studio-2008重新编译,我根本无法让代码单步运行。OpenClipboard 工作,但 EnumClipboardFormats() 没有工作,单步时没有任何工作。但是,当我在完整的代码块下方设置断点时,一切正常。YES vc2008 对 szBuf 周围的堆栈帧损坏进行了精确诊断。vc2008 有很多值得喜欢的地方。如果这只是一个剪贴板问题,那就太好了 - 不知道我会被迫担心通过任何事情,线程上下文问题是否可能是由于 dot-Net-debugger。