系统版本:Win10 x64 1809
VS版本:VS2017 企业版
问题一
在动态链接库(DLL)附加到进程调试时,用VS2017附加后单步调试,结果发现总是在调试过程中卡死,VS2017无响应;
解决办法是:强制结束VS2017进程,重新附加
问题二
在VS2017中调试总是出现上述问题,无奈之下决定换个VS版本进行调试,正好本机之前安装了VS2010,于是采用VS2010进行调试,结果又遇到问题了。
新问题:在VS2010中,按照VS2017的设置进行配置好后,下断点,附加到目标进程调试,在目标进程中运行,发现断点总是命中不了,无法进到断点,找了一晚上解决办法,试了很多种办法,均以失败告终。
失败方法一
对于这个问题只要修改注册表,方法如下:开始->运行->输入regedit->HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main增加DWORD键TabProcGrowth,值为0就行!重启VS2010即可。
失败方法二
问题产生的过程是这样的,向exe项目(CSharp)中添加dll工程(c++开发)的引用,并将引用工程的属性“Link Library Dependencies”的值设为true,这样,在不加入lib的情况下,exe项目仍可以链接dll正常运行,但问题也出现了,在dll工程中设置 的断点会被无视。解决方法:一、DLL工程的设置
设置Configuration Properties->General->Output Directory的值为$(SolutionDir)\bin\$(Configuration)\
设置Configuration Properties->Linker->Debugging的值为$(SolutionDir)lib\$(Configuration)\$(ProjectName).pdb
设置Configuration Properties->Linker->Advanced的值为$(SolutionDir)lib\$(Configuration)\$(ProjectName).lib二、exe工程的设置(C++的设置方法,C#的不做这一步)
将引用工程的属性“Link Library Dependencies”的值设为fasle。
设置Configuration Properties->Linker->General->Additional Library Directories的值设置为$(SolutionDir)lib\$(Configuration)\
在Configuration Properties->Linker->Input->Additional Dependencies中加入xxx.lib三、开启断点功能
1. managed code的项目属性中debug页里,"Enable unmanaged code debugging"选上。
2. unmanaged code项目属性的debugging页里,Debugger Type设为Mixed。
……
有效方法
无奈之下,本机之前也安装了VC6.0,因此又采用VC6.0进行尝试,结果由于之前未成功安装SP6补丁,打开附加进程选项后,进程列表直接是空的,在网上找了很多如何安装SP6补丁的教程资料并进行尝试打补丁,结果提示不能成功安装SP6补丁,最终仍以失败告终。
最后还是把解决方法锁定在VS2010中,最后找到博客:
记录一下vs2008调试dll时无法进到断点的解决方法
选择当前的项目-属性-调试-调试器类型,默认是选的"自动", 将它改成"仅限本机"
改过之后重新编译运行,就可以进到断点了!!!
问题三
warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/OPT:ICF”规范)