1>.\uistatus.c(2) : fatal error C1083: 无法打开包括文件:“winable.h”: No such file or directory
哎吗。。。。悲剧了,另外1>srf - 184 个错误,47 个警告
winable.h我是弄不到了,看了下介绍:
winable.h在2005年7月已经从Windows SDK移除,因为它的功能已经在winuser.h被复制。所以那时候决定花费更多的努力在更新winuser.h上,而这样就相当于是在更新两个文件的功能。(winable.h was moved from the Windows SDK in July 2005 because functionality was duplicated in winuser.h. It was determined at that time that efforts would be better spent on updating winuser.h to Windows Vista-level functionality rather than updating the functionality of both files.
只能算了,另外你网上找到的简直有点天方夜谭。若真如这样,那我只能说vc6编译器就是个智障。(我用的不多,vc6盛行的时候用的是mingw,后来改成vs2008)
它的意思是,假设有个exe是输出“123”
而程序代码没有cout而是cin,反汇编的时候无法从CPU指令里找到cout动作,所以无法调试。
这不扯么,哪个编译器在调试前不重新生成一次。就像我前面说的,你可以写个cout程序,编译它然后生成,接着改成cin后直接F5.
另外,不管你程序有没有退出,假如没有退出时无法进行第二次编译生成的,编译器会提示编译结果,而且我们也知道当一个程序打开占用的时候,另一个程序是无法对它写操作的,同样你可以自己测试一下,编译好一个程序后进入代码文件夹启动程序(不要关闭),接着改动源代码重新编译,提示是无法操作的。
dll存在同样道理,它的计数器不归0,内存中是不会释放的,不会释放就无法再次对硬盘里的dll写操作,也不会被删除(文件打开中无法删除)
但有一点是肯定的,调试和编译是两种概念,很早以前的时候vc系列编译器就以调试强大而出名,但被那帮做linux转到win做项目的人鄙视,因为调试和编译是完全不同的2种性质,所以C++其它编译器并没有在调试功能上下很大的功夫。
调试的时候动作等同于反汇编,记住,二进制生成和脚本代码最大的区别除了功能上的另一个是代码还原能力几乎为0.如果反汇编什么都能做那这意味任何程序都会被还原成源代码。那也意味没有技术垄断,意味着当winrar加密后只要有人反跟踪一次操作行为就可以做出解压rar不需要密码的程序。
话说回来,我倒觉得那改动的代码并不是不能被跟踪的。不过我还想不到什么原因
7楼我已经说过了,我一直以为是编译不过去(调试前会有编译重新生成行为)。我一直在想是哪里错了。
说到现在才知道你能编译,而只是不能调试某一段代码。
最大的一个可能是,在你启动调试前,这段代码已经被执行了。(我不知道它的调试方式是什么,但上面出问题的代码等于初始化dll,调试器会跟踪自身初始化代码吗?)。如果你真心想跟踪它,我推荐一款已经停掉的软件OllyDebug被称为世上最强反汇编工具,当然前提是你看得懂。
你可以试着跟踪dll的其它地方,如果就只是状态码不能调试,那就是调试器的问题。