在VS13中调试时遇到了无法启动 .exe

lionelmessiCODE 2017-03-18 02:05:03
1.我的这个解决方案包含5块,一个是C#界面,然后调用其他4个项目生成的dll(C++编写的);
2.我每次打开生成的exe文件后,再次退出exe就会在任务管理器上发现这个.exe文件依然残留;怀疑是我C++中一些线程没有 关闭;
3.尝试用断点调试一下,F5直接就出现无法启动.exe,如下图所示

问题1:为啥我的exe第一次打开后,退出时不能跟随着关闭,在任务管理器中也关闭不了,如果我的C++线程有一些没有关闭是不是会造成这种现象?
问题2:怎么正确的调试多线程,目前我这边使用的是日志调看,还有没有其他方法?求推荐,顺带求大家帮忙解释下第3点的问题,去网上也查看了一些,没有得到解决;多谢各位!
...全文
288 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-04-21
  • 打赏
  • 举报
回复
《Windows编程启示录》 19.6 为什么有些进程在被终止之后还停留在任务管理器中 当某个进程结束时(可能是正常结束,也可能是因为调用了像TerminateProcess之类的函数),这个进程的用户态模块将被删除。但内核态模块只有在与线程相关的所有驱动程序执行完成之后才会被删除。 例如,如果某个线程正处于I/O操作中,那么将会给负责I/O的驱动程序发送一个内核信号来取消这个操作。 如果驱动程序的行为是良好的,那么它将清除与这个未完成I/O相关的一些信息并且释放线程。 如果驱动程序的行为是不好的(可能是因为驱动程序管理的硬件表现出奇怪的行为),那么可能需要花很长的时间来清除这个未完成的I/O。在这段时间里,驱动程序将不会释放这个线程(以及这个线程所在的进程)。实际的情况要更复杂一些,但这里的简单模型对于我们的讨论已经足够。 …… 换句话说,如果你终止了某个进程后还能在任务管理器中看到这个进程,那么实际上这个进程已经停止运行了,只不过还有些残留的信息保留在系统中,只有当与这个进程相关的所有驱动程序都完成了清除操作并且指向这个进程的句柄都已经关闭,进程才会完全消失。
lionelmessiCODE 2017-04-21
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
你生成的x64,但你电脑是Win32。我猜。
唔,赵老师,我是在64位机下写的代码~
赵4老师 2017-03-20
  • 打赏
  • 举报
回复
你生成的x64,但你电脑是Win32。我猜。
lionelmessiCODE 2017-03-18
  • 打赏
  • 举报
回复
如果有些细节没有描述清楚,欢迎指出来~

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧