c++ 为什么我不能在VS.NET调试器中单步执行剪贴板代码?

erhoui1w  于 11个月前  发布在  .NET
关注(0)|答案(2)|浏览(107)

理想情况下,读者已经将原生C程序升级到Visual Studio 2008,其中包含OpenCash()块。为什么不在从OpenCash()获得成功的返回代码后设置断点并逐步执行代码。根据互联网,它可能在您的系统上工作,但当然,不是在我的系统上,谢谢尝试。
谷歌搜索,例如((OpenScript 1418 vc6))找到类似“GetClipboardData fails in debugger”和“No Error in VC
6 but Error in VC++ 2005”的文章。务实地说,目前问题解决了-我根本不能在这样的代码中设置断点,我需要松鼠的信息和设置断点后,剪贴板操作完成。错误1418是“线程没有一个剪贴板打开”但只要你不使用VS.NET,或者像我说的,如果你把断点放在剪贴板打开关闭块之外,它就能正常工作。
如果我知道VS.NET调试器的确切问题是什么,我会感觉更好。
作为一个C的人,我只是模糊地意识到,当你做dot-Net的时候,你不应该考虑线程。无论如何,我没有找到一个大师级的解释到底发生了什么,事实上,问题是否是dot-Net调试器以某种方式巧妙地干扰了线程信息,当你单步通过原生C代码时。
系统方面:大约一年的历史,两个双核至强,4个CPU根据XP-pro。我刚刚完成调试代码单步调试通过它在VC6下XP-SP2-32位。所以我知道代码是相当多的罚款在VC6下。然而,当我测试与10兆CF_TEXT我得到异常。我想尝试调试下更好的异常模型的XP-x64。
用visual-studio-2008重新编译,我根本无法让代码单步执行。OpenClipboard工作了,但EnumClipboardfields()不工作,单步执行时什么都不工作。然而,当我在完整的代码块下面设置断点时,一切都很好。而且 * 是的 * vc 2008在szBuf周围做了一个精确的诊断'堆栈帧损坏。有很多关于vc 2008的东西。如果这只是一个剪贴板问题,那就太好了-如果不知道我会感到不得不担心单步执行任何东西,无论线程上下文问题是否可能是由于dot-Net-debugger。

g6baxovj

g6baxovj1#

我从来没有看过这个,但很容易猜到:

  1. The clipboard is a shared resource
    1.在任何给定的时间点,只有一个应用程序(每个桌面)可以“拥有”剪贴板
    1.您的应用拥有它(调用OpenClipboard()后)
  2. VS想要它(可能是因为它是一个编辑器)
    1.当您的应用程序在断点处停止时,无论等待多少时间,都不会找到不属于您的应用程序的剪贴板。
    1.欢乐万岁!
w3nuxt5m

w3nuxt5m2#

不要浪费时间怀疑它是.NET的东西。有时,Visual Studio.NET和.NET运行时之间的关系就像ActiveX和ActiveDirectory -它告诉你哪个市场参与者,Visual Studio.NET实际上有许多调试器。本地,脚本或托管-只有后者是真正与. NET相关的。您将使用本地调试器。
如果你想调查一下,我建议你使用微软的Detours来连接OpenCart,然后在调试器中运行你的应用,你就可以看到谁在竞争剪贴板。

相关问题