作者:robable004_96978 | 来源:互联网 | 2023-09-25 11:17
1.程序运行状态下调试程序的方法
在程序运行时(不是在提调试状态),如果此时要调试某一个功能,可以通过debug->attach to process(调试->附加到进程),然后在将要调试的代码段添加断点,来对正在运行的程序进行调试:
在调试时还可以用另一个vs调试正在运行的其他的vs打开运行的exe程序
2.常用快捷键总结:
VC++:
Ctrl+k+f:格式化代码
Alt+上下箭头:跳转到上一个函数或下一个函数体
Alt+g:跳转到当前文件中
F12:跳转到定义处
ctrl+”+”或”-”:跳转到前一个光标位置或后一个光标位置
shift+tab:回退tab
ctrl+g:跳转到指定行
3.线程相关库及对应的编译器选项
libc.lib:单线程(static)--/ML
libcd.lib:调试版单线程(static)--/MLd
libcmt.lib:多线程(static)--/MT
libcmtd.lib:调试版多线程(static)--/MTd
msvcrt.lib:多线程dll--/MD
msvcrtd.lib:调试版多线程dll--/MDd
4.两个解决方案共用一个工程中的代码(如共用一个动态链接库的工程源文件进行编译,或其中一个解决方案调用另一个解决方案中的动态链接库)
如解决方案sln1.sln和sln2.sln
一个动态链接库工程myDll.dll工程在sln1.sln中创建,如果sln2.sln这个工程也想用sln1.sln中的myDll.dll的动态链接库,但不希望将sln1.sln中的动态链接库拷贝到sln2.sln中进行调用,而是直接配置sln2.sln中使用myDll.dll工程的那个工程的属性来将sln2.sln的生成路径指定到sln1.sln的debug或release目录下,这样就可以两个解决方案共用同一个代码,但是这样做后虽然sln2.sln能配置lib的路径,但是调用lib对应的dll时是从当前sln2.sln的当前目录中找对应的dll的,而不是在lib同一个目录下找的,所以要特别指定dll所在的路径,最好使用动态调用的方式,即LoadLibrary(),GetProcAddress()的方式调用,指定dll的路径(最好使用相对路径,如两个解决方案在同一个目录下比较好移动)
5.VS相关的宏
_DEBUG:在debug模式下vs默认会产生该宏来标识debug模式,用途:
#ifdef _DEBUG
hModule = LoadLibrary("..\\testd.dll");
#else
hModule = LoadLibrary("..\\test.dll");
#endif
TargetDir:即程序运行时所在的目录,如通过LoadLibrary("..\\MMaild.dll");指定的路径就是相对TargetDir而言的,而非针对ProjectDir而言的!!!
ProjectDir:和release、debug目录平级的并且和工程名同名的那个目录即为ProjectDir
慎重!!!
6.不要用release来调试!用debug模式来调试程序!否则看到的内容很可能是错位的!