C++ 断点在全屏模式下挂起基于DirectX的程序

C++ 断点在全屏模式下挂起基于DirectX的程序,c++,visual-studio,debugging,directx,breakpoints,C++,Visual Studio,Debugging,Directx,Breakpoints,我开始制作一个游戏,我有一个全局类,读取csv文件,加载两个direct x曲面,并创建背景 这些曲面是一个平铺,另一个曲面是从平铺创建的背景。背景表面不起作用,注入后我检查它,如果为空,则会出现一个消息框。它总是显示消息框 我尝试设置断点以查看是否正确读取csv文件中的值,但程序不会运行。任务栏中出现一个框,程序全屏显示,但屏幕变黑,不显示消息框,只能通过ctrl、alt、del停止 无论我是否放置断点,即使它位于不同的源文件中,这种情况都会发生。有人知道为什么吗 p、 它不是一个多线程应用程

我开始制作一个游戏,我有一个全局类,读取csv文件,加载两个direct x曲面,并创建背景

这些曲面是一个平铺,另一个曲面是从平铺创建的背景。背景表面不起作用,注入后我检查它,如果为空,则会出现一个消息框。它总是显示消息框

我尝试设置断点以查看是否正确读取csv文件中的值,但程序不会运行。任务栏中出现一个框,程序全屏显示,但屏幕变黑,不显示消息框,只能通过ctrl、alt、del停止

无论我是否放置断点,即使它位于不同的源文件中,这种情况都会发生。有人知道为什么吗

p、 它不是一个多线程应用程序

编辑:


我正在visual studio中使用visual studio 2005和direct x 9.c,如果您的项目未配置为调试模式(而是配置为发行版),您将无法调试,因此您设置的任何断点都将被忽略。这可能就是问题所在。

使用directshow时,全屏调试可能会比较麻烦:如果您确实需要这样做,我建议您使用第二个屏幕(这样,您可以在屏幕1上调试,而程序在屏幕2上全屏运行)

如果这不起作用,您将不得不使用远程调试(即在一台计算机上运行程序,在另一台计算机上调试)

最有可能发生的情况是,您的调试点被触发,但您的屏幕被directshow控制,因此无法显示视觉效果。因此,您的程序实际上被visual阻塞,它不响应任何东西(因为事件循环被调试器阻塞)

因此,我要:

  • 在窗口模式下运行
  • 在双屏模式下运行,调试器在另一屏模式下运行
  • 尝试设置远程调试(祝您好运)
  • 可能使用旧的好方法来调试printf/跟踪(例如log4cpp)

将其强制为窗口模式,您可以修改或挂接处于调试状态的应用程序

如果中断点被忽略,为什么应用程序在启动时会冻结?它可能会冻结,因为程序中的逻辑正在进入无限循环。这也可能是断点之前的情况,这会导致描述的行为。您是否尝试过在程序开始处设置断点并尝试单步执行?我知道在图形程序中这很乏味,但是你可能会发现这样的问题导致你的屏幕挂起。编辑:根据上面的答案和信息,似乎情况并非如此。听起来@Bruce走的路是对的。德国劳埃德船级社!也可能值得点击“step”而不是“run”,以查看您是否可以进入代码,即全屏模式从Windows“劫持”显示。Windows不再能够在不干扰DirectX的情况下将内容写入显示器。因此,现在不建议使用DirectX的全屏模式;最好使用窗口模式,将窗口扩展到整个屏幕。窗口模式只是稍微慢一点,所以请确保在全屏模式下需要额外的速度。编写全屏模式程序的开发人员通常首先在窗口模式下开发和调试,或者让另一台计算机远程链接调试器。将使用printf,但错误是我无法在屏幕上显示任何内容,只有黑色lol,因此使用断点选项。这是一个非常有用的答案,因为我对自己开发和使用的direct x框架很有信心,但考虑到这一点,这是我第一次在全屏上尝试断点。我支持使用两个视频卡和两个监视器,或者一个能够驱动两个监视器的视频卡的建议。