vc2005调试程序错误笔记
VC++2005编译出程序在XP下执行出错的解决方法
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\atlmfc\lib\atls.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\ws2_32.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\shell32.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\comctl32.lib:
修改成Multi-threaded(/MT)
修改了Runtime类型以后
需要将MFC的编译类型也改成静态库
Project->Property->configurationProperties->General->UseofMFC
修改成UseMFCinaStaticLibrary
一部分情况下在这步就能解决问题
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\winspool.lib:
Searchingd:\ProgramFiles\MicrosoftVisualStudio8\VC\PlatformSDK\lib\advapi32.lib:
而动态MFC库使用的是Multi-threadedDLL(/MD)
浅析C语言程序调试过程及编程常见错误
浅析C语言程序调试过程及编程常见错误C语言是一种广泛使用的程序设计语言,常用于开发系统软件和应用软件。
在编写C语言程序时,经常会出现一些错误和bug,因此调试是程序开发过程中不可或缺的一步。
本文将从浅析C语言程序调试过程及编程常见错误两个方面进行分析。
一、C语言程序调试过程1.编译程序:在进行调试前,首先需要将源代码编译成可执行文件。
编译过程中会进行词法分析、语法分析、语义分析等操作,同时会检查语法错误并生成目标代码。
2.设置断点:在需要调试的程序代码中,通过设置断点来指定程序的一些位置停止执行。
断点可以设置在任何地方,包括函数调用、循环语句等。
3.运行程序:运行调试器,加载编译得到的可执行文件,并运行程序。
当程序执行到设置的断点位置时,会自动暂停执行。
4. 调试程序:在暂停执行的位置,可以查看变量的值、执行堆栈信息、运行指令等。
通过观察这些信息,可以发现程序中的错误或bug。
5.单步执行:在调试过程中,可以选择单步执行程序。
单步执行可以按照一条指令一条指令地运行程序,并观察程序的执行情况。
这样可以更精确地找到问题所在。
6. 修改程序:当发现错误或bug时,需要对程序进行修改。
修改可以包括更改变量的值、调整算法逻辑等。
修改后需要重新编译并重新运行程序。
7. 重复调试:进行一次修改后,需要再次运行程序并进行调试。
在多次调试中,需要逐步修复所有的错误和bug,直到程序能够正常运行。
1.语法错误:语法错误是最常见的错误之一、例如忘记加分号、括号不匹配、变量未声明等。
这些错误在编译时会被检测到,并给出详细的错误提示。
2.逻辑错误:逻辑错误是程序中最难调试的错误之一、逻辑错误导致程序的行为和期望的不一致,但不会引发编译错误。
调试逻辑错误需要仔细检查算法和代码逻辑,并通过查看变量值等调试信息逐步找出错误所在。
3.数组越界错误:当访问数组时,需要确保不超出数组的范围。
如果越界访问数组,可能导致程序崩溃或产生不可预料的结果。
VS2005编译链接错误小结
1.run error: 没有找到MSVCR80D.dll,因此这个应用程序未能启动。
重新安装应用程序可能会修复此问题?解决办法:方法一、微软对于这个问题应该也有处理,不过感觉不是很人性化。
在“属性->配置属性->清单工具->常规“下有一个”使用FAT32解决办法,把它选成是,就可以了。
注意:一定要先配置这个选项,然后再编译工程,要不然还是不好用方法二、找到你的工程的文件夹,如(myproject),找到其下的myproject\myproject\Debug\ myproject.rec,把它删掉(删掉整个Debug目录也可以),重新编译就可以了。
2. iostream.h 和 iostreamiostream.h 和 iostream两个是不同的东西。
前者是传统库函数中的头文件,后者(没有.h)是标准库中的头文件。
而标准库中的东西,都是定义在std名字空间里,是为了防止污染全局名字空间。
如果使用 iostream 头文件,就需要引用std,即加上using namespace std。
3. warning LNK4204: “…\Debug\vc80.pdb”缺少引用模块的调试信息;正在链接对象,如同没有调试信息一样如果生成的是 debug 模式的可执行文件但链接的却是 release 库,或者如果生成的是release 版本的可执行文件但链接的却是 debug 库,那么就出现上述问题。
4. warning:去掉字符串操作函数"_CRT_SECURE_NO_DEPRECATE"解决办法:方法一、右键该项目,在Project -> Properties ->C/C++->预处理器->预处理器定义中添加_CRT_SECURE_NO_DEPRECATE标记即可。
方法二、Project -> Properties -> C/C++ -> Command Line加入/D"_CRT_SECURE_NO_DEPRECATE"分析:出现这样的警告,是因为VC2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。
vs2005编译的程序不能启动大致有两个原因
如果是debug版, 就复杂一些了, 首先要确定你需要的DLL的版本, 绝大多数(注意:不是"所有")情况下它和编译器的版本相同, 通过vs2005的关于对话框就能看到, 如下图所示:
确定版本后, 在开发组的机器上进入“%windir%\winsxs"文件夹(下面将以x86平台8.0.50727.762版本的debug CRT为例进行说明) 需要依版本号而定的部分用加粗表示, 拷贝以下文件到目标机器的相同位置即可:
2. 开发机运行正常, 换到其它机器上就不行了
这一般就是系统DLL(包括CRT, MFC, ATL等)没有正确配置导致的。
如果程序是release版, 那么很简单, 只要把“\SDK\v2.0\Boovcredist_x86.exe"拷贝到目标机器上运行即可.(解释一下——拷贝这个程序到目标机然后运行,像是装了一个什么东西。装完了以后再运行用平台开发出来的程序,如果还提示有什么DLL找不到,那就把开发机上相应的DLL拷贝出来,贴到用户机中相应的文件夹里面。比如一个MFC的什么DLL找不到,在开发机上搜索这个DLL,记住它的路径,然后按这个路径贴到用户机上。) 这是以x86平台为例的, 如果你用的是别的CPU平台(amd64或ia64)把x86替换成相应的内容就可以了。
x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f文件夹下所有文件;
Manifests文件夹下
x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.cat
x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.manifest
VS2005应用配置不正确清单(manifest)R6034
VS2005应用配置不正确清单(manifest)R6034现象用VS2005编译的程序部署到某些系统(XP、Win2003)中常会遇到#1“ 应用程序配置不正确,程序无法启动,重新安装应用程序可能会修复问题。
”或者#2“没有找到MSVCR80.DLL,因此这个应用程序未能启动。
重新安装应用程序可能会修复问题。
”或者当复制MSVCR80.DLL到应用目录后提示#3“R6034”。
原因Visual C++ Libraries as Shared Side-by-Side Assemblies (大意如下)vs2005在XP、2003开发模式支持shared SxS,用到ATL, MFC, Standard C++, CRT库的应用需要邦定(清单)manifest才能正确加载相应DLL。
如果应用程序在这些系统下未邦定清单,即使将这些库放到应用本地也不会正确加载(#3)。
在Windows 98/2000下,由于不支持该模式,加载时采用默认的方式加载DLL,也就不会出现上述问题。
解决1.应用程序嵌入清单文件Visual Studio 中的清单生成(大意如下)1)“项目属性”对话中,在“配置属性”选项卡上,单击“链接器”,再单击“清单文件”,然后单击“生成清单”。
2)“项目属性”对话中,打开“清单工具”节点,然后选择“输入和输出”的“嵌入清单”选择“是”。
2.当应用程序依赖于ATL、MFC、CRT等时,将相应DLL连同清单文件一同打包发布。
将下面目录下的相应文件一同打包发布Release:D:\Program Files\Microsoft Visual Studio8\VC\redist 86Debug:D:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist 86如将MFC是“D:\Program Files\Microsoft Visual Studio 8\VC\redist 86\Microsoft.VC80.MFC”目录下的Microsoft.VC80.MFC.manifest和mfc80.dllPS:点击相关链接获取详细信息。
vc2005 编译错误 error C2143
D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(25) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(26) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(26) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(26) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(26) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(26) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(26) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(27) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(27) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(27) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(27) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(27) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(27) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(28) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(28) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(28) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(28) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(28) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(28) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(29) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(29) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(29) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(29) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(29) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(29) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(30) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(30) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(30) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(30) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(30) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(30) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(31) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(31) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(31) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(31) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(31) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(31) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(32) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(32) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(32) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(32) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(32) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(32) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(33) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(33) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(33) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(33) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(34) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(34) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(34) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(34) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(35) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(35) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(35) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(35) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(35) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(35) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(36) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(36) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(36) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(36) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(36) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(36) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(37) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(37) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(37) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(37) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(37) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(37) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(38) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(38) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(38) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(38) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(38) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(38) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(39) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(39) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(39) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(39) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(39) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(39) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(40) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdio(40) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(18) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(18) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(18) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(18) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(18) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(18) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(20) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(20) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(20) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(20) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(20) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(20) : error C2059: 语法错误: “:”2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(21) : error C2143: 语法错误: 缺少“{”(在“:”的前面)2>D:\Program Files\Microsoft Visual Studio 8\VC\include\cstdlib(21) : fatal error C1003: 错误计数超过100;正在停止编译2>生成日志保存在“file://d:\mutualregistration2\bin\ImageRegistration.dir\Debug\BuildLog.htm”2>ImageRegistration - 102 个错误,个警告解决方案是把.C 改为.CPP文件,在项目—属性——C/C++ 高级中——改为编译为 C++ 代码(/TP)。
VisualStudio2005编译的版本无法启动,出现应用程序配置不正确的错误
在上找出了这些⽅法: ⽅法⼀: 在类似C:\Program Files\Microsoft Visual Studio 8\VC\redi st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列⽂件: msvcm80d.dll msvcp80d.dll msvcr80d.dll Microsoft.VC80.DebugCRT.manifest 把这⼏个⽂件拷贝到⽬标机器上,与运⾏程序同⼀⽂件夹或放到system32下,就可以正确运⾏了。
其他release版、MFC程序什么的都是拷redist下相应⽂件夹下的⽂件就可以了,⽂件夹后都有标识! ⽅法⼆: 修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运⾏时库的静态链接,在运⾏时就不再需要VC的dll 了。
⽅法三: ⼯程-》属性-》配置属性-》常规-》MFC的使⽤,选择“在静态库中使⽤mfc” 这样⽣成的exe⽂件应该就可以在其他机器上跑了。
⽅法四: 你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装 在⼤部分机上都可以运⾏了,唯独在我的测试机上还是报应⽤程序配置错误。
刚开始怀疑是还缺少dll,在能跑的机上把windows/system32⽬录下所有的msvc*.dll都复制到这台机的运⾏⽬录,还是不⾏!极度郁闷※×…!后来实在没辙了,就在VC环境中打开了EXE来查看它内嵌的manifest资源,⽆奈了看了⼀会,带着⼼中对manifest的咒骂,突然发现这个manifest带了两个版本CRT的依赖: 再打开Microsoft.VC80.CRT.manifest⼀看,是这样: 就是说,我们EXE的Manifest⾥多了⼀个版本依赖,那就把后⾯那个依赖删除试试。
于是就把⼯程设置的⽣成manifest的选项去掉,⼿⼯改了⼀下manifest放到程序⽬录下,发现果然可以运⾏了! 还有个问题没有明⽩,就是VC为什么在⾃ 傻膍anifest⾥带了两个依赖呢,上再查了⼀下,发现在msdnonline上说'8.0.50608.0'这个版本是在XP下⽤的,'8.0.50727.762'这个版本是在Vista下⽤的(/en-us/library/ms235342(VS.80).aspx),可是我⽤的是'8.0.50727.762'在XP下运⾏的好好的!想不通是它错了还是别的原因。
C语言程序调试功能和常见错误提示
C语言程序调试功能和常见错误提示C语言程序调试是指通过查找和纠正程序中的错误,以确保程序的正常运行。
在编写C语言程序时,由于各种原因可能会出现各种错误,包括语法错误、逻辑错误和运行时错误等。
调试功能和常见错误提示有助于快速定位并解决这些错误。
一、C语言程序调试功能1.编译器错误提示:当编译器检测到语法错误时,会输出相应的错误信息。
例如,如果缺少分号或括号不匹配,编译器就会报错并指出错误的位置和原因。
这些错误提示可以直接指导程序员去定位和解决错误。
2.断点设置:调试器支持设置断点,即在程序的其中一行代码上设置断点,当程序运行到该行时,程序会自动暂停执行,以便程序员观察和修改程序状态。
通过设置断点,可以逐行或逐块跟踪程序的执行过程,准确定位错误位置。
3.单步执行:调试器支持单步执行,即一次只执行一行代码,通过逐行调试可以观察程序状态的变化,帮助找到错误或问题所在。
4.变量监视:调试器可以显示程序中的变量的当前值,通过监视变量的值,可以帮助程序员分析程序的执行过程,找到变量赋值错误或逻辑错误。
5.查看内存:调试器可以查看程序的内存状态,包括变量的内存地址和内容等。
通过查看内存可以帮助程序员理解程序在运行时的内存使用情况,定位内存错误或越界访问等问题。
6.异常处理:调试器可以捕获和显示程序中的异常信息,例如除零错误、空指针引用等。
通过异常处理,可以快速定位和解决程序中的异常问题。
7.日志记录:调试器可以记录程序的执行过程和状态,包括函数调用、变量变化等。
通过查看日志记录,可以帮助分析程序的运行轨迹,快速定位错误。
1.语法错误:语法错误是最常见的错误,编译器会给出相应的错误提示。
例如,拼写错误、缺少分号、括号不匹配等都属于语法错误。
2.链接错误:链接错误一般是由于使用未定义的函数或变量引起的。
编译器会提示找不到符号的错误。
3.运行时错误:运行时错误是指在程序运行过程中发生的错误,包括除零错误、空指针引用、数组越界等。
使用VC2005一些问题及解决方案(一)
使用VC2005一些问题及解决方案(一)首先是我使用VC2005在不通阶段的不通感受:刚开始安装VS2005时候感觉:真是大啊!装了我一个上午!!而且运行个VC有时能耗我好大的内存。
刚使用VC2005时候的感受:界面挺不错,貌似功能更强大,对C++标准支持的很好,还可以用我最喜欢的Comic Sans MS字体,还支持代码收缩等等。
虽然比较慢,但是不像VC6. 0那样老是出现编译死机的情况。
开始用VC2005学习写东西的时候的感受:实在没有6.0好用,限制太多,很多地方跟VC6. 0不一样,而且很多功能似乎都找不到了。
还不如6.0方便。
使用一段时间的感受:虽然经常遇到问题但是都是有很好的解决方案的,而且相对6.0,2005的BUG少很多,总体来说如果机器配置还算可以的话,用2005是挺不错的。
下面就是我使用VC2005遇到的以及解决了的问题:VC遇到的以及解决了的问题1,对于Radio控件如何正确设置属性Group?首先要确保几个Radio控件的Tab是按顺序的(可以在对话框编辑器中按Ctrl+D将三个控件T ABORDER设置在一起)。
然后对第一个Radio控件选择Group属性,其他的不用选。
对第一个控件添加关联变量int m_test,并且设置初值-1,则当我们点击第一个控件m_test值是0,点击第二个m_test值是1....依此类推。
2,VC2005中添加虚函数问题:在VC6.0中可以对类右键添加虚函数,在VC2005中需要在类属性中点击一个重写按钮,在那里添加虚函数。
3,VC2005动态添加右键菜单问题:在VC6.0中我们可以在Project->Add To Project->Component and Control中添加组件,如添加Pop-up Menu可以实现添加右键快捷菜单的功能。
但是在VC2005中我们没有这个功能,但是我们可以手动自己添加,也不是很复杂。
步骤如下(假设工程是一般MFC视图工程命名Menu):1,自己添加一个Menu资源,例如命名为IDR_MENU1,编辑之。
Visual Studio 2005下C++智能设备应用程序常见错误及解决方法
本文属转载,原文地址:/shaozhuyong/article/details/7406366
Visual Studio 2005下C++智能设备应用程序常见错误及解决方法1、MFC智能设备应用程序不能创建的问题:
解决方法:
1.关闭VS2005,运行 RegEdit.exe
2.找到以下路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Ext\PreApproved
3.右键新建项:{D245F352-3F45-4516-B1E6-04608DA126CC}
4.关闭注册表
5.再运行VS2005即可了
2、.exe不是一个有效的PocketPC应用程序
解决方法:更改命令行成下面
3、RSFC.h找不到的问题
解决方法:设置附加库目录。
4、模拟器中只有一个.exe文件,无法执行。
解决方法:库目录没设置好,设置好后调试应该能解决。
5、.exe启动不了的问题
解决方法:可能类库引用有问题,往模拟器上上传类库应该可以解决。
6、在静态库中使用MFC引发的问题。
调试错误如图:
解决方法:解决方案管理——属性页——配置属性——常规——项目默认值——MFC的使用属性改为:在共享DLL 中使用MFC。
7、调试中出现无法解析的外部符号的另外一个可能原因是,在类中定义了一个函数,而没有实现,却直接调用。
解决方法:找到函数实现之。
未完待续…………。
VC 常见调试错误代码
-----------------首先说下最常见的link错误处理办法:在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainLIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 下面介绍解决的方法:1. Windows子系统设置错误, 提示:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows2. Console子系统设置错误, 提示:LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 控制台项目要使用Console子系统, 而不是Windows, 设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console3. 程序入口设置错误, 提示:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup, 即可4. 线程运行时库设置错误, 提示:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 这是因为MFC要使用多线程时库, 需要更改设置:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded其中,Single-Threaded 单线程静态链接库(release版本)Multithreaded 多线程静态链接库(release版本)multithreaded DLL 多线程动态链接库(release版本)Debug Single-Threaded 单线程静态链接库(debug版本)Debug Multithreaded 多线程静态链接库(debug版本)Debug Multithreaded DLL 多线程动态链接库(debug版本)单线程: 不需要多线程调用时, 多用在DOS环境下多线程: 可以并发运行静态库: 直接将库与程序Link, 可以脱离MFC库运行动态库: 需要相应的DLL动态库, 程序才能运行release版本: 正式发布时使用debug版本: 调试阶段使用例如,当我们不在MFC创建的环境下(console appllication),使用CString类等等,那么就会出现nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 错误,这时可以按照上面的方法,设置Code Generation为Debug Multithreaded,即可解决问题。
VC6的LNK2005错误
VC6的LNK2005错误使用VC编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。
弄清楚它形成的原因,就可以轻松解决它了。
出现LNK2005错误有多种原因:1.重复定义全局变量。
2.头文件的包含重复。
3.使用第三方的库造成的。
这里只讨论使用第三方的库造成的原因的处理。
如果在程序中同时使用了多个函数库,并且这些函数库中有些函数名称有冲突,就会引起LNK2005错误。
微软提供了两套C运行期函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。
另外一种是支持多线程的:msvcrt.lib。
如果一个工程里,这两种函数库混合使用,可能会引起这个LNK2005错误,一般情况下它需要MFC的库先于普通运行期函数库被连接,因此建议使用支持多线程的 msvcrt.lib。
通常是尽量避免这样混合使用两套函数库(LIBC.lib和MSVCRT.lib)。
如果不得不同时使用两套函数库或者其它相互有冲突的函数库,可以尝试按下面所说的方法:在编译包含zlib库文件的时候,出现以下错误:Linking...MSVCRT.lib(MSVCRT.dll) : error LNK2005: _malloc already defined in LIBCD.lib(dbgheap.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: _sprintf already defined in LIBCD.lib(sprintf.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fclose already defined in LIBCD.lib(fclose.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: _free already defined in LIBCD.lib(dbgheap.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: __vsnprintf already defined in LIBCD.lib(vsnprint.obj)MSVCRT.lib(MSVCRT.dll) : error LNK2005: _fflush already defined in LIBCD.lib(fflush.obj)LINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:libraryDebug/Test.exe : fatal error LNK1169: one or more multiply defined symbols found产生的原因是一个函数在两个不同的Lib中都有导出(MSVCRTD 和LIBC有冲突),有两种办法处理:方法一: MSDN对此的解决方法是增加[/FORCE:MULTIPLE]连接选项. 这方式发现会有警告,但可以编译通过:LINK : warning LNK4075: ignoring /INCREMENTAL due to /FORCE specificationMSVCRT.lib(MSVCRT.dll) : warning LNK4006: _malloc already defined in LIBCD.lib(dbgheap.obj); second definition ignored MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _sprintf already defined in LIBCD.lib(sprintf.obj); second definition ignored MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _fclose already defined in LIBCD.lib(fclose.obj); second definition ignored MSVCRT.lib(MSVCRT.dll) : warning LNK4006: _free already defined in LIBCD.lib(dbgheap.obj); second definition ignored MSVCRT.lib(MSVCRT.dll) : warning LNK4006: __vsnprintf already defined in LIBCD.lib(vsnprint.obj); second definition ignoredMSVCRT.lib(MSVCRT.dll) : warning LNK4006: _fflush already defined in LIBCD.lib(fflush.obj); second definition ignoredLINK : warning LNK4098: defaultlib "MSVCRT" conflicts with use of other libs; use /NODEFAULTLIB:library方法二:添加链接选项:/NODEFAULTLIB:<library> 如:/nodefaultlib:"libcd.lib" 该方法能编译通过,并且没有警告。
error 1935 c++2005
error 1935 c++2005
错误1935通常与Visual Studio中的C++项目有关,表示尝试加载的DLL(动态链接库)找不到或无法加载。
以下是几个可能的解决方案:
1.确保所有依赖项都已正确安装和配置:检查项目是否依
赖于其他库或DLL,并确保它们都已正确安装和配置。
2.重新构建项目:有时,简单地清理并重新构建项目可以
解决问题。
在Visual Studio中,你可以选择“Build”菜单中的“Clean
Solution”选项,然后重新构建项目。
3.检查路径设置:确保所有必要的库和DLL都在系统的
PATH环境变量中,或者在项目的属性中设置了正确的路径。
4.更新Visual Studio:如果你使用的是较旧的Visual Studio
版本,考虑更新到最新版本。
旧版本的IDE可能不支持C++2005
中的某些功能。
5.查看详细的错误消息:通常,错误消息会提供更多关于
问题的详细信息。
仔细阅读错误消息,看看是否有其他提示或
解决方案。
6.搜索在线资源:尝试在搜索引擎中输入完整的错误消息,
可能会找到其他开发者遇到相同问题的解决方案。
7.联系技术支持:如果上述方法都不起作用,考虑联系软
件供应商或查找相关的技术支持论坛。
请注意,由于我没有关于你遇到问题的具体上下文信息(例如,你的项目配置、依赖项、系统环境等),所以这些建议可能不完全适用于你的情况。
如果可能的话,提供更多详细信息将有助于更准确地诊断和解决问题。
VC++常见的错误及其解决方法
VC++中常见的编译错误及其解决方第一部分编译错误1.error C2001: newline in constant 编号:C2001 直译:在常量中出现了换行。
错误分析:(1)字符串常量、字符常量中是否有换行。
(2)在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
(3)在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。
(4)在这句语句中,某个字符常量的尾部是否漏掉了单引号。
(5)是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。
2.error C2015: too many characters in constant 编号:C2015 直译:字符常量中的字符太多了。
错误分析:单引号表示字符型常量。
一般的,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:if (x == 'x || x == 'y') { … }值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
两个单引号之间不加任何内容会引发如下错误:error C2137: empty cha racter constant。
3.error C2018: unknown character '0x##'编号:C2018 直译:未知字符…0x##‟。
错误分析:0x##是字符ASC码的16进制表示法。
这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。
如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
4.error C2041: illegal digit '#' for base '8'编号:C2141 直译:在八进制中出现了非法的数字…#‟(这个数字#通常是8或者9)。
C#2005未处理的win32异常解决办法
注意
实时调试将对在本机应用程序中承载的托管代码不起作用,例如可视化工具。
注意
在 Windows Server 2003 或 Windows 2000 SP3(或更新版本)上安装 .NET Framework 后,只有在计算机重新启动后,实时调试才可用于在终端服务会话中通过受限用户帐户运行的进程。
对于 Windows 窗体,您还必须在 machine.config 或 application.exe.config 文件中启用实时调试。有关更多信息,请参见如何:为 Windows 窗体启用实时调试。
在服务器上安装 Visual Studio 后,当发生一个未处理的异常时,默认行为会显示一个需要用户干预的“异常”对话框,用户要么启动实时调试,要么忽略该异常。这对无人参与执行可能是不需要的。若要配置服务器以在未处理的异常发生时不再显示对话框(安装 Visual Studio 之前的默认行为),请使用注册表编辑器删除以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
பைடு நூலகம்
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
删除后打开visual studio 2005,选工具-选项-调试-实时,把右面的三个选项的对勾都去掉就ok了
如果没有看到调试那是因为你没有选择显示全部选项,打开工具-选项以后,在左下角有一个显示全部选项的选框,选上就ok
“Iexplore.exe[XXXX]中发生未处理的win32异常”解决办法
VS2005远程调试攻略
VS2005远程调试攻略介绍远程调试的文章网络上其实有不少,我这里也会涉及到,但会更加的详细和细致,比如win7(32、64)系统下的调试,家庭版的调试,以及一些常见问题的原因和解决办法。
一般我们都会这么操作,比如在VIST A之前的系统如,2K, X P, 2003下(这里都是32位):(1) 远程端:安装VS2005光盘"\vs\Remote Debugger\x86\rdbgsetup.exe"。
或者直接运行或copy本地端的:"Program Files\Microsoft Visual Studio8\Common7\IDE\Remote Debugger\x86"(2) 远程端:“本地安全策略-安全选项-网络访问:本地帐户的共享和安全模式”改为:经典-本地用户以自己的身份验证。
(3) 远程端:启动Remote Debuger,从“工具-选项”中将身份验证模式改为“无身份验证,允许任何用户进行调试”。
或者直接用命令行:"\ msvsmon.exe" /noauth /anyuser /nosecuritywarn,可以建个快捷方式以方便运行。
(4) 将需要调试的程序debug版本和相应的pdb文件(包含调试信息)拷贝到远程主机,启动该debug版本程序。
(5) 本地:在VS2005中,“工具”--“附加到进程”,传输选“远程”,限定符输入远程端的主机名或IP地址,回车,选择我们需要调试的应用程序。
如果一切正常,那么我们现在可以像调试本机程序一样调试远程主机上运行的debug版本了。
细节和常见问题:(1)如果是64位系统,请选择x64,即\vs\Remote Debugger\x64\rdbgsetup.exe;(2)不要因为远程主机是64位的,就使用64位的remote debugger,它必须和你的应用程序匹配,即统一为32位,或64位。
Visual C++调试器Debugger
Visual C++2005调试器使用—消除逻辑错误Visual C++2005简介•Visual C++2005是微软VC中第一个基于.NET技术开发的C/C++集成开发环境(IDE)。
•Visual C++2005为个人和企业用户单体和团队开发软件提供了良好的解决方案。
编译错误和逻辑错误简介编译错误(Complilation Error):编译错误时指程序在编译过程中,因为不符合语言语法而无法生成可执行文件的错误类型。
一般由编译器列出,较容易消除。
逻辑错误(Logic Error):逻辑错误也称程序缺陷(BUG),并不会使程序编译失败,但在程序运行过程中的确使程序产生错误的结果。
而消除逻辑错误的主要工具就是调试器(Debugger)。
Visual C++2005调试器—激活调试器Visual C++2005调试器—调试器选项Visual C++2005调试器—设置断点断点(BreakPoint):断点是指在可执行的代码上设置的标记。
当程序运行到断点时就会暂停,允许用户检查此时变量的值,方便用户找出逻辑错误设置断点:1.直接点击代码左边栏2.在指定行按下F9Visual C++2005调试器—检查断点检查断点:1.在Debug—Windows中找到BreakPoint、2.直接快捷键ALT+F9VC++2005调试器—StepInto/StepOver•StepInto(F11):单步执行下一条语句,并立即暂停。
(进入子程序)•StepOver(F10):一次一个语句的执行,或者可以看出一行VC++2005调试器—StepInto实例VC++2005调试器—StepOut实例VC++2005调试器—StepOver实例•Step Over(F10):逐句进行程序的运行,和StepInto最大的区别是在有函数调用时,隐藏函数调用的细节,返回函数调用的结果。
VC++2005调试器—视图功能介绍0VC++2005调试器—视图功能介绍1•AUTO视图:负责显示一些当前断住状态下的变量的值,注意,这些只有在程序中断的时候才有意义。
vs2005调试技巧
Visual Studio调试基础篇下面有从浅入深的6个问题,您可以尝试回答一下.1. 一个如下的语句for (int i = 0; i < 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入断点.2. 在一个1000次的循环体内部设置断点,你希望当循环进行到900次后中断,怎么才能做到呢?3. 你有一个表达式在上面循环的某一次发生了变化,你想知道是哪一次,在哪个地方,怎么才能做到?4. 你希望你的断点在被命中100次后,每命中三次中断一次,比如第103,第106,第109怎样做?5. 你有在调试一个服务程序,希望在其内部打上了断点,可是,由于这是一个公用的服务你不希望其他访问这个服务的程序被你的调试所干扰,你想怎么办?6. 怎样知道2个断点中断的时间间隔问题1,2这两个问题最简单,我在一个例子里说明例如如下循环for(int i=0;i<1000;i++){doSomeThing......}在循环的大括号上单击右键,插入断点,用这个方法,可以对付那些喜欢把语句写在一行上的家伙,其实,随着.Net3.5中Linq的出现,我们肯定也会经常在在一行上写复杂的表达式,这个时候用这种插入方法会比较管用ok,现在我们来编辑这个断点的条件,在断点上右键单击,选择如图菜单项在弹出的窗口中可以设置断点命中的条件i==900注意我是在调试C#代码,默认的条件语句语法是C#,如果你想切换,那就需要用Ctrl-B,来插入断点,并在弹出窗口中选择语言通过这样设置条件断点,我们就可以解决我们的问题1,2了.问题3同样通过设置条件断点我们还可以解决我们的问题3,对表达式变化的跟踪string user="yizhu2000"for(int i=0;i<10000;i++){DoSomething1().......DoSomethingN()}当循环执行完毕时我们发现user变成了"smart_boy",你不知道这个值是在第几次循环的时候变化的,那么你是不是会选择打上断点,一次一次中断,来查看呢?当然不用在循环体结束的位置我们设置一个断点,打开条件编辑窗口(打开方法同上),设置表达式为user,勾选下面的HasChanged,也就是说,你告诉断点,当user的值发生变化时才触发(注意:第一次执行到断点的时候,程序一定会中断,并计算这时表达式的值,所以,所谓发生变化,指的是以后执行到断点是表达式的值和第一次执行到断点时表达式的值的比较)问题4如何让断点在指定的命中次数或者大于某个次数时触发呢?方法是设定几个断点的HitCount,右键单击断点,在弹出菜单中选择Hit Count,会弹出如下窗口在"when the break point is hit"下拉列表里,我们可以看到四个选项break always:总是中断break when the hit count is equal to:等于某次数时中断beak when the hit count is a multpile of:当次数是某数的倍数时中断break when the hit count is greater than or equal to:当大于等于某数时中断问题5前面4个问题都已经解决了,第5个问题的解决方法是利用断点的Filter功能,比如我希望断点只有被机器名为yizhu的机器访问才能触发,我可以这样设置当其他机器访问程序的时候,断点将不会触发,这样做的优点是通过设置机器名,我们可以让其他机器访问的时候感觉不到断点的存在,除此之外我们可以设置机器名,进程号,进程名,线程号,线程名作为filter,而且还可以把他们组合起来,比如我希望通过当机器yizhu的dllhost进程调用时才触发,那么问题就可以设置为MachineName="yizhu"&ProcessName="dllhost"问题6现在我们来解决第6个问题:在程序性能调试的时候,我们经常需要知道某段代码的执行效率,一般来说,我们可以在程序中加入时间点,通过时间点相减来取得时间间隔,这种方法有个显而易见的缺点就是需要修改程序,想要不修改程序,就需要借助一些工具,那么有没有什么方法可以声明式的插入时间点,并计算值呢?其实断点完全可以做到在给出方法前,我们来看看断点的另外一个设置项,When Hit,这个选项可以让我们在命中断点后做一些事情,包括输出一些内容,或者调用宏,比如输出一个程序中变量的值我们输出了变量user的值,下面Continue Execution表示程序不会中断,输出后继续执行,注意表达式需要用{}括起来,,其他的部分会被作为字符串输出。
Visual Basic 2005编程基础与项目实践_09
Visual Basic 2005 编程基础与项目实践——第09章 管理错误与异常
程序错误
程序错误是指在执行程序代码的过程中,影响程序正常执
行的异常现象,程序设计中常见的错误有三种:编译错
误、运行时错误以及逻辑错误。下面对这三种程序错误 分别举例说明。
Visual Basic 2005 编程基础与项目实践——第09章 管理错误与异常
Try
Try...Catch...Finally...End Try控制结构测试代码片段,并指导应用程 序如何处理各种不同类型的错误。在此过程中,该结构的三个组 成部分分别扮演着特定的角色。 Try关键字下面的语句块是正在被测试是否异常的代码。 Catch子句标识与特定异常相关联的代码块。Catch...When块指导代 码在特定情况下执行。不包含When的Catch子句将响应所有异常。 因此,代码中可能包含一系列特定的Catch...When语句,每条语句 响应特定类型的异常,最后使用通用的Catch块来响应前面的 Catch...When子句未能截取的任何异常。
Visual Basic 2005 编程基础与项目实践——第09章 管理错误与异常
创建异常用于结构化异常处理
在Exception基类中有两种已定义的异常子类:
System.Exception和 Application.Exception。
System.Exception是.NET框架用于从中派生预定义公共语 言运行时异常类的类。当发生非致命错误时,公共语言
非结构化异常处理
非结构化异常处理通过Err对象和以下三种语句来实现:On Error、
Resume和Error。On Error语句创建单个异常处理程序以捕捉发生
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.无法解析的外部符号_main,该符号在函数___tmainCRTStartup 中被引用?现将解决方案大概叙述一下:连接程序在负责连接可执行程序时,选择相应的c/c++运行时启动函数。
如果设定了/subsystem:windows连接程序开关,那么连接程序会试图寻找WinMain或wWinMain函数。
如果连个函数都不存在,那么就会返回一个“一个未解决的外部符号”(无法解析的外部符号_main,该符号在函数___tmainCRTStartup 中被引用)同样,如果设定了/subsystem:console连接程序开关,那么连接程序就会试图寻找main函数或者wmain函数,如果找不到这连个函数是,连接程序返回unresolved externel symbol 错误信息。
变成新手容易犯的一个错误是,创建应用程序时选择了错误的应用程序类型。
例如,开发人员创建了一个新的Win32应用程序项目,并给这个项目创建了一个入口函数main。
在这种情况下,创建应用程序时,开发人员就会看到一个连接程序的错误信息。
这是因为Win32应用程序项目设置了/subsystem:windows连接程序开关,但是却找不到相应的Winmain或者wWinmain函数。
这是侯你可以有以下几种解决方案。
1 将main函数改为Winmain函数2 将/subsystem:windows开关改为/subsytem:console3全部删除/subsytem:windows开关,让连接程序根据源代码中实现的函数进行正确的操作。
更改/subsystem:windows的方法:右键点击项目,选择属性,会看到如下的选项框,点击连接器->系统,在右侧会看到“子系统”选项,在这里可以选择相应的连接程序开关2. MessageBoxW' : cannot convert parameter 2 from 'const char [13]' to 'LPCWSTR'VS2005设置UNICODE或ASCII字符集问题VS2005开发程序时,默认的字符集是Unicode。
所以如果程序中使用字符常量一定要显示转换为Unicode型,否则编译时报错。
如果你不希望程序支持Unicode 字符集,更改项目设置就可以了。
project->properties->configurations Properties -> General ->Project Defaults -> Charater Set中将Unicode字符集改为未设置即可UNICODE计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码。
ASCII 码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符。
他们以为这128个数字就足够表示abcd....ABCD....1234 这些字符了。
咳......说英语的人就是“笨”!后来他们突然发现,如果需要按照表格方式打印这些字符的时候,缺少了“制表符”。
于是又扩展了ASCII的定义,使用一个字节的全部8位(bit)来表示字符了,这就叫扩展ASCII码。
范围是0x00 - 0xFF 共256个字符。
咳......说中文的人就是聪明!中国人利用连续2个扩展ASCII码的扩展区域(0xA0以后)来表示一个汉字,该方法的标准叫GB-2312。
后来,日文、韩文、阿拉伯文、台湾繁体(BIG-5)......都使用类似的方法扩展了本地字符集的定义,现在统一称为MBCS 字符集(多字节字符集)。
这个方法是有缺陷的,因为各个国家地区定义的字符集有交集,因此使用GB-2312的软件,就不能在BIG-5的环境下运行(显示乱码),反之亦然。
咳......说英语的人终于变“聪明”一些了。
为了把全世界人民所有的所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集。
UNICODE 使用2个字节表示一个字符(unsigned shor int、WCHAR、_wchar_t、OLECHAR)。
这下终于好啦,全世界任何一个地区的软件,可以不用修改地就能在另一个地区运行了。
虽然我用IE 浏览日本网站,显示出我不认识的日文文字,但至少不会是乱码了。
UNICODE 的范围是0x0000 - 0xFFFF 共6万多个字符,其中光汉字就占用了4万多个。
嘿嘿,中国人赚大发了:0)在程序中使用各种字符集的方法:const char * p = "Hello"; // 使用ASCII 字符集const char * p = "你好"; // 使用MBCS 字符集,由于MBCS 完全兼容ASCII,多数情况下,我们并不严格区分他们LPCSTR p = "Hello,你好"; // 意义同上const WCHAR * p = L"Hello,你好"; // 使用UNICODE 字符集LPCOLESTR p = L"Hello,你好"; // 意义同上// 如果预定义了_UNICODE,则表示使用UNICODE字符集;如果定义了_MBCS,则表示使用MBCSconst TCHAR * p = _T("Hello,你好");LPCTSTR p = _T("Hello,你好"); // 意义同上在上面的例子中,T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用MBCS,也不明确表示使用UNICODE。
那到底使用哪种字符集那?嘿嘿......编译的时候决定吧。
设置条件编译的方式是:VC6中,"Project\Settings...\C/C++卡片Preprocessor definitions" 中添加或修改_MBCS、_UNICODE; 中,"项目\属性\配置属性\常规\字符集"然后用组合窗进行选择。
使用T 类型,是非常好的习惯,严重推荐!3.构造函数#include <iostream.h>class Animal{public:void eat(){}Animal(int height){cout<<"Animal"<<endl;cout<<height<<endl;}};class Fish:public Animal{public:Fish():Animal(10),a(1){cout<<"fish"<<endl;cout<<a<<endl;}private:int a;};void main(){//Animal an;//an.eat();// an.breathe();Fish fh;}4. fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory。
这个错误一般在使用Visual C++ .NET 2005时出现。
原因,iostream.h为C类库,C++类库中应该为iostream。
另外cin,cout等函数在std命名空间中。
使用时应加上using namespace std;解决方法:将#include <iostream.h>改为#include <iostream>using namespace std;5.调试:顾名思义就是你还在调整这个程序,在调试中可以设置断点,从而跟踪程序的每一步执行过程,找到算法上的不足或者是逻辑错误。
运行:自然就是直接运行咯,输入然后输出,结束。
不会挑错,出错就得停止运行了。
DEBUG(调试、排错)/RELEASE(释放、发布)8. LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”你在项目属性的连接命令行加/nodefaultlib:libci这是你用.net打开vc6导致的!9. Linking... /subsystem:windowsLIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16Debug/TestWin.exe : fatal error LNK1120: 1 unresolved externalsError executing link.exe.解决方法是:将project-settings-link的project options里的/subsystem:windows改成/subsystem:console原因:Win32 Application的入口函数为WinMainWin32 Console Application的入口函数是mainin32 Application和Win32 Console Application 都是工作在32位Windows环境的程序。
其中:(1)Win32 Application就是普通的常见的窗口应用程序,当然有的界面做得比较个性化,比如圆形的、不规则形状的…它们都是所谓的GUI(Graphics User Interface图形用户接口),我们可以通过鼠标点击来完成控制。
Win32 Application是为你开发windows应用程序所准备的,程序以WinMain()为入口,#include<windows.h>,能够使用win32 API函数。
(2)而Win32 Console Application(win32控制台应用程序)往往是像MS-DOS窗口(XP中叫命令提示符)的样子出现,我们得用键盘输入各种命令来使用它,它与纯dos程序区别是:它是32位的;或者叫CUI(Character User Interface字符用户接口)。
console程序以main()为入口,不能使用win32 API函数。
10. btn.Create("button",WS_CHILD|BS_DEFPUSHBUTTON,CRect(0,0,100,100),this,123); ainfrm.cpp(69) : error C2664: 'CButton::Create' : cannot convert parameter 1 from 'const char [7]' to 'LPCTSTR'解决方法:1)2005的时候一般习惯在创建工程的时候去掉使用unicode字符集2) btn.Create(_T("button"),WS_CHILD ¦BS_DEFPUSHBUTTON,CRect(0,0,100,100),this,123);11. general error c101008a: Failed to save the updated manifest to the file "不能保存更新的文件,就是以前残留的文件没有删除,即:要删除Debug文件夹(这个问题以前已经讨论过了,有些错误必须这样做)解决方法:2种方法:第1种方法.手动删除Debug,注:在VS2008有2个Debug,2个都要删第2种方法:自动删除:在VC++6.0编译器下,build--->Clean,而在VS2008下,生成--->清理解决方案下面是摘自网上的一些,讨论的结果关于mt.exe : general error c101008a: Failed to save the updated manifest to the file2009-10-09 23:15这个问题经常出现!其实并不是你的真正出现了什么问题,只是你的编译链接的时候编译器自身的问题而已!也许是VS2005 ,VS2008 的BUG吧,解决的方法:点class view中的工程,选右鍵,再点clean就可以了;或者是build->clean solusion也可以,就是如此的简单,我本人觉得,还是VS 6.0用着好用,呵呵,可能是怀旧吧!。