0

当使用专用GPU运行VS时,我遇到了Visual Studio调试器中的一些奇怪行为。使用Visual Studio调试器时出现的错误行为

奇怪的是,当我终止正在构建的程序时,调试器保持运行。在集成显卡上运行VS时我没有看到这一点。此外 - 我检查是否有线程或COM对象仍然活着,并有一个活动的线程,但没有COM引用。

我觉得很奇怪。你们有没有经历过类似的事情?我错过了明显的东西吗?使用专用GPU运行VS时是否需要更改设置或特殊规则?

它并没有真正伤害任何东西 - 但它会让我的强迫症爆发。 ;)

谢谢大家提前为您的建设性意见:d

最诚挚 阿尔法Silverback的

+0

这也会让我烦恼。当我看到这种行为时,这是我的错。 (几个问题......)当你说'终止执行'时,你具体怎么做?你能够击中'全部休息'(暂停按钮 - Ctrl-Alt-Break)吗?你有调试标志设置(D3D11_CREATE_DEVICE_DEBUG)吗?输出窗口说什么?有时断言会失败,但不会弹出对话框,并会显示在输出窗口中。 – Jeff

+0

我可以看到这是一个错误的表达。对不起 - 这是垃圾:我的意思是我发布了一条退出消息 - 将程序发送到内部终止函数。 :)设备处于调试模式 - 是的。我从WinMain返回之前检查了所有引用都是零,并且所有参数都是无效的。我可以告诉调试器在橙色框架上(从手动按Shift + F5_之前我无法调试)。是的 - 我可以打破所有或暂停流程。 谢谢您的回复! – Silverback

+0

呵呵:输出窗口输出S_OK或0x0(_No错误,一切正常)。没有什么不是它应该如此。 :)除了我必须手动停止调试。 – Silverback

回答

0

我一直在上网很长一段时间来寻找答案。使用不同图形加速器运行应用程序的区别仅在于,当应用程序使用专用GPU运行时,WinMain返回后,线程不会死亡。

为了解决这个问题 - 我尝试过任何活的对象是显式调用析构函数,然后调用的std ::退出(返回代码)WinMain函数的返回调用前右将正确杀死所有的线程中。但是,不同的硬件产生不同的行为仍然很奇怪。该解决方案适用于两者。

**Example**: 
WinMain(...){ 
. 
. 
. 
object.~Class(); 
std::exit(return-code); 
//return return-code; 
} 

我不喜欢这个答案,因为它不应该是必要的。

如果您找到其他方法,请确保您已添加解决方案。先谢谢你。

最真诚的, Alpha Silverback

相关问题