vs2008简单调试方法
Visual Studio 2008基本调试技巧

Байду номын сангаас
加入WriteLine输出语句。
断言的使用
Debug类(命名空间System.Diagnostics) Debug.Assert(表达式,string str)
表达式:“测试条件” str:“提示消息” Debug.Assert(this.textBox1.Text.Length > 0, "输入值为空!"); 在断言中不要调用程序中的方法,避免与程序 发生功能联系。
小结
VS 2008 基本调试技巧 断点设置、调试输出、变量监视、调试堆栈、 逐过程调试、逐语句调试、使用WriteLine方法 来辅助输出调试信息。 断言Debug 测试是调试的入口,重心在于设计输入数据让 特定的问题出现的技巧。 调试不等于测试,调试重心在于修正语法错误 和逻辑错误的过程,重点在于定位问题。
VS 2008 基本调试技巧
断点设置
F9快速断点设置
调试输出
F5调试输出
变量监视
调用堆栈
逐过程调试
在断点处,如果希望继续执行程序,则 可按F5键,程序会运行到下一个断点的 代码行处。 如果要一步步查看程序的执行情况,以 及变量、属性值等,则可按F10键(逐过 程调试的快捷键)。
逐语句调试
VS应用环境的调试、配置和测试解析

开发环境的配置
注:DirectShow的配置方法和之前OpenCV的配置方法类似, 为了简洁,就不截图了。另外一点,就是在目录
F:\Program Files\DXSDK\Samples\C++\DirectShow\BaseClasses\
下是没有Debug和Release子文件夹的,需要编译一个程序 才能生成。但是由于DirectShow版本和VS版本的问题导致 这个程序的编译产生很多错误,比较难调试。所以对这个 编译工作暂时不作要求,在附件中我将把我编译好的库给 大家,只要将它们拷贝到
选择项目test1属性在弹出的test1属性页中展开左边属性列表中的配置属性链接器输入在右边的附加依赖项中填写几个库文件的名opencvcalib3d242dlibopencvcontrib242dlibopencvcore242dlibopencvfeatures2d242dlibopencvflann242dlibopencvgpu242dlibopencvhighgui242dlibopencvimgproc242dlibopencvlegacy242dlibopencvml242dlibopencvobjdetect242dlibopencvts242dlibopencvvideo242dlib注意库文件名字之间用空格隔开
第一个例子程序
该程序的效果是,从硬盘中加载指定的图 像文件,并在窗口中显示出来。如下图所 示:
第一个例子程序
第二个例子程序
下面将通过第二个简单的例子程序,介绍 如何编写基于对话框的MFC程序。
(1)打开VS2008编程环境。选择“文件”->“新建”->“项 目”,在弹出的“新建项目”对话框中,展开左侧树形列 表“项目类型”->“Visual C++”->“MFC”,在右侧的“Visual Studio 已安装的模板”栏中选择“MFC 应用程序”。填写 项目名称,这里为Test2。点击“确定”按钮;见下图:
vs2008打开并且调试wince工程

vs2008打开并且调试wince工程
要在vs2008中打开已经生成的wince程序,首先你要下载一下一个wince的模拟器,我下载的是wince6.0的版本。
打开wince模拟器的文件夹
第一步:选择连接加载.bat文件,这是注册界面,点击确定
第二步:选择SDMMC 800.bat(这是屏幕的分辨率,看你的工程里面的屏幕配置)
第三步:选择连接启动.bat,然后将其他里面的设备插入底座
•1
•2
•3
•4
•5
在第二步的时候,wince6.0的模拟器已经打开了
首先在左上角有个文件按钮,点击文件->配置->共享文件夹(在这个里面插入你的wince工程)
退出到主界面:
然后点击开始,选择设置里面的控制管理,
a:点击PC-连接,点击OK键就行了
b:点击网络和拨号->新建连接->直接连接->下一步->选择设备
选择DMA
然后就完成,可以退出到wince主界面了
这是最主要的一步:你要确定你的电脑里是否下载了windows Mobile设备中心,我之前就没装,然后大部分时间就卡在这了。
版本网上可以下载的。
这是已经连接好了,这时候就可以使用wince模拟器了
这是没有连接的
点击移动设备->连接设置,要是上面的步骤都做好了,会出现下面的界面:
做到这一步,说明wince模拟器已经配置好了,用vs2008打开你的wince工程,你就可以进行调试和运行了
wince6.0模拟器及其相关软件我已经上传到了我的资源,希望可以帮助到大家。
(qq:1143403680,欢迎交流)。
原创_CreoPro5_VS2010转2008开发设置、调试

CreoPro5_VS2010转2008开发设置与调试复制SDK头文件将C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\VerRsrc.h复制到C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\转调VS2008【项目】|【xx属性】—属性页对话框|【配置属性】|【常规】—【平台工具集】:V90包含文件和库文件【项目】|【xx属性】—属性页对话框|【配置属性】|下【VC++目录】中【包含目录】:<CreoPro5>\protoolkit\includes(早期加<CreoPro5>\prodevelop\includes)(PTK程序实例中函数加<CreoPro5>\protoolkit\protk_appls\includes)C:\Program Files\Common Files\PTC\Creo 1.0\B000\protoolkit\includes【库目录】:<CreoPro5>\protoolkit\i486_nt\obj(早期<CreoPro5>\prodevelop\i486_nt\obj)C:\Program Files\Common Files\PTC\Creo 1.0\B000\protoolkit\i486_nt\obj注意:以上两项务必保持默认的“从父级或项目默认设置继承”【C/C++】|下【预处理器】中【预定处理定义】:若使用ProMessageDisplay()加PRO_USE_VAR_ARGS (或者也可在主cpp文件中加预定义语句#define PRO_USE_VAR_ARGS 1)【链接器】|下【输入】中【附加依赖项】和【忽略特定默认库】(忽略重定义错)设置:必须包含“ProToolkit.h”,且必须是首个PTK包含头文件,这对异步模式尤为重要。
vs 2008调试命令

命令名快捷键说明调试.应用代码更改Alt + F10开始一个“编辑”或“继续”生成,以应用对正在调试的代码所作的更改。
调试.自动窗口Ctrl + Alt + V,A显示“自动”窗口,以查看当前过程内当前执行行范围中的当前变量的值。
调试.全部中断Ctrl + Alt + Break临时停止执行调试会话中的所有进程。
仅可用于“运行”模式。
调试.在函数处中断Ctrl + B显示“新建断点”对话框。
调试.断点Ctrl + Alt + B显示“断点”对话框,在此可添加和修改断点。
调试.调用堆栈Ctrl + Alt + C显示“调用堆栈”窗口,以显示当前执行线程的所有活动过程或堆栈帧的列表。
仅可用于“运行”模式。
调试.删除所有断点Ctrl + Shift + F9清除项目中的所有断点。
调试.反汇编Ctrl + Alt + D显示“反汇编”窗口。
调试.启用断点Ctrl + F9将断点从禁用切换到启用。
调试.异常Ctrl + Alt + E显示“异常”对话框。
调试.即时Ctrl + Alt + I显示“即时”窗口,在此可计算表达式和执行个别命令。
调试.局部变量Ctrl + Alt + V,L显示“局部变量”窗口,以查看当前堆栈帧中每个过程的变量及变量值。
调试.内存1Ctrl + Alt + M,1显示“内存1”窗口,查看在“监视”或“变量”窗口中不能清楚地显示的大缓冲区、字符串和其他数据。
调试.内存2Ctrl + Alt + M,2显示“内存2”窗口,查看在“监视”或“变量”窗口中不能清楚地显示的大缓冲区、字符串和其他数据。
调试.内存3Ctrl + Alt + M,3显示“内存3”窗口,查看在“监视”或“变量”窗口中不能清楚地显示的大缓冲区、字符串和其他数据。
调试.内存4Ctrl + Alt + M,4显示“内存4”窗口,查看在“监视”或“变量”窗口中不能清楚地显示的大缓冲区、字符串和其他数据。
调试.模块Ctrl + Alt + U显示“模块”窗口,该窗口允许查看由程序使用的 .dll 或.exe 文件。
vs2008调试技巧

VS2005调试技巧集合/rainylin/archive/2007/09/06/1775125.aspx下面有从浅入深的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,21. 一个如下的语句for (int i = 0; i < 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入断点2. 在一个1000次的循环体内部设置断点,你希望当循环进行到900次后中断,怎么才能做到呢?这两个问题最简单,我在一个例子里说明例如如下循环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你希望你的断点在被命中100次后,每命中三次中断一次,比如第103,第106,第109怎样做?如何让断点在指定的命中次数或者大于某个次数时触发呢?方法是设定几个断点的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 怎样知道2个断点中断的时间间隔现在我们来解决第6个问题:在程序性能调试的时候,我们经常需要知道某段代码的执行效率,一般来说,我们可以在程序中加入时间点,通过时间点相减来取得时间间隔,这种方法有个显而易见的缺点就是需要修改程序,想要不修改程序,就需要借助一些工具,那么有没有什么方法可以声明式的插入时间点,并计算值呢?其实断点完全可以做到在给出方法前,我们来看看断点的另外一个设置项,When Hit,这个选项可以让我们在命中断点后做一些事情,包括输出一些内容,或者调用宏,比如输出一个程序中变量的值我们输出了变量user的值,下面Continue Execution表示程序不会中断,输出后继续执行,注意表达式需要用{}括起来,,其他的部分会被作为字符串输出。
VS2008下编写调试dll的一个实例(参考msdn)

VS2008下编写调试dll的一个实例(参考msdn)演练:创建和使用动态链接库在本演练中,您将创建一个动态链接库(DLL),其中包含可供其他应用程序使用的有用例程。
使用DLL 是一种重用代码的绝佳方式。
您不必在自己创建的每个程序中重新实现这些例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。
本演练使用本机C++。
有关使用本机C++ 创建静态库的演练,请参见演练:创建和使用静态库。
有关使用面向公共语言运行库的Visual C++ 的演练,请参见演练:创建和使用托管程序集。
本演练涵盖以下内容:创建新的动态链接库(DLL) 项目向动态链接库添加类创建引用动态链接库的应用程序在控制台应用程序中使用类库的功能运行应用程序先决条件本主题假定您具备C++ 语言的基础知识。
创建新的动态链接库(DLL) 项目从“文件”菜单中,选择“新建”,然后选择“项目…”。
从“项目类型”窗格中选择“Visual C++”下的“Win32”。
从“模板”窗格中,选择“Win32 控制台应用程序”。
为项目选择一个名称,如“MathFuncsDll”,并将其输入“名称”字段。
为解决方案选择一个名称,如“DynamicLibrary”,并将其输入“解决方案名称”字段。
按“确定”启动Win32 应用程序向导。
在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”。
从“Win32 应用程序向导”中的“应用程序设置”页中,选择“应用程序类型”下的“DLL”(如果可用),或者选择“控制台应用程序”(如果“DLL”不可用)。
某些版本的Visual Studio 不支持使用向导创建DLL 项目。
您可以稍后对此进行更改,以将项目编译为DLL。
从“Win32 应用程序向导”的“应用程序设置”页中,选择“附加选项”下的“空项目”。
按“完成”创建项目。
向动态链接库添加类若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。
VS2008简明教程

比尔盖茨创建微软公司,以 BASIC 起家,开发推广了 MSDOS,Windows 系列操作系 统,和形式各样的软件。包括今天的专题 VS2008 开发软件。
Windows 平台(无论是 windows xp,还是 windows 7)已经成为每个人进入信息社会的 必经的平台,包括微软公司在内的诸多软件公司,开发了各种各样的软件(娱乐,休闲,工 作,行业等等软件)。
作为一名学习者 VS2008 的来源是个问题,庆幸的是微软公司提供了试用版和体验版, 可以到微软的官方网站()查询下载。
盗版软件,最好不要使用,至少不要用于商业开发。因为使用盗版软件本身就是损害软 件从业人员的福利和前途,也损害者您自己的前途和福利。尽管,目前很多小型软件公司依 然使用盗版软件做软件开发。
伯兮科技 info@
VS2008 简明教程 version 1.0
写在前面:...............................................................................................................................1 第一章:启动软件...................................................................................................................2 第二章:Hello World ...............................................................................................................2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VS2008简单调试方法
程序的错误通常可以分为若干类,语法错误,链接错误,逻辑错误。
语法错误是比较容易查找并且修改的,而且编译给出的提示信息也比较完整,所以容易修改。
链接错误来源很多,常常由于和系统、库函数等方面的原因出错,难以一言蔽之。
最后是逻辑错误,也就是学生在实验课上碰到的难点,因为系统没有给出明确的提示,同学也只是知道运行错误,那么如何找到并修改运行错误就非常重要。
下面以一个实例简单介绍一下调试过程,当然更加深入的还需自己多练习,学习。
该文档所举例子为VS2008,同样适用于VS2005,VC++6。
1 一个实例
一个链表的程序,包括主程序Win32_C_Proj.cpp文件,Bucket.h和Bucket.cpp,其中Bucket用链表的方式实现一个容器。
如下分别展示了main函数,bucket的插入元素函数和类的数据定义。
运行结果如下图
运行该程序,我们要的结果是1,2,因为是再第一位置插入1,第二位置插入2。
而现在这个程序的输出结果却是2,1,和我们预想的不符合,说明程序设计过程中存在逻辑上的错误,也就是算法设计的问题。
2 初步发现问题
接下来第一步就是要发现问题。
程序就那么几句,很明显,我们需要做的第一步就是确定错误的大至位置。
按F10运行程序,运行程序如下:
其中1位置是调试常有的工具按钮,2位置的箭头指示的是当前程序运行到的位置。
工具按钮中八个按钮分别是:
●继续运行(F5,会运行到下一个断电停止,如果没有断点,则运行到结束)、
●停止运行(不结束程序ctrl+shift+F5)、
●结束运行(结束程序调试 shift+F5)、
●重新启动、
●显示下一个语句、
●运行到函数内部(如果当前语句是一个函数)(F11)
●运行到同层的下一条语句(F10)
●跳出当前函数(shift+F11)
我们按F10,运行到bucket1.insertElem(2,2),这时候箭头指向该语句,表示该语句前面的语句都运行完成,但是该语句还未运行,显示的监视窗口如下:
Bucket1变量展开之后可以看到,它包含size=1,head节点和currentNode。
Head节点展开,其值data为-858993460(这个区域对链表头而言没有用),next又指向一个节点,所指节点值为1,next为空。
这些结果和我们的预期一致,说明到目前为止没有发现错误。
再按F10,运行的窗口监视变化为下图:
从这里观察head的next指向的节点值是2,2这个节点指向的值是1,很明显我们希望在第二个位置插入2,而不是第一个位置。
因此可以断定刚才执行的这个语句有问题。
2 深入发现问题
在初步发现问题在InsertElem函数之后,接下来重新开始,并且在发现错误的这条语句上加断点(光标停留在该语句行,并且按F9),效果如下:
这样设置的目的是便于直接运行到该位置,特别在程序比较长的时候,如果再次从头一步一步运行非常耗时间,所以这里设置断点,然后按F5可以直接运行到该位置。
我们让程序运行到该位置,效果如下:
这时候就需要进一步考察该函数运行了,因为我们已经断定这里存在错误。
用F11让程序运行进入到该函数内部,效果如下:
接着按照前面的方法用F10让程序在该层逐步运行,并且对比你所预期的结果和程序运行的结果,如果不一致,便发现问题了。
在本例中,要在第二个为止插入节点,那么for 语句应该执行一次,让p移动,而我在执行过程中发现,for语句没有进入内部执行,直接到如下为止,因此可以断定此处存在和预期不符合的情况。
再仔细推敲,很容易发现问题:for语句中的k初始为2导致p没有向后移动。
3 解决问题
发现问题后加以解决就非常方便了,只要把k的初始值改为1便可。
至此,我们解决了一个逻辑错误。
当然算法如果还有其它的错误,则还需要进一步发现。
4 其它
在程序较长的时候,特别是有循环存在的时候,可以适当设置若干个断点把程序分成几个部分,然后直接F5运行到断点,观察结果和预期效果。
这样做的好处就是可以避免对长程序逐语句运行耗费很多时间,可以快速确定程序问题所在区域。
然后在该区域内部再一步一步跟踪执行。
另外,在调试程序的时候,通常需要多遍运行,而不是一次就可以,所以很多同学一边运行一边输入数据的方法就非常麻烦。
这时候可以把要输入的数据先固定存储成变量或者数组,避免每一次调试都要重新输入。
待调试成功后再改回去便可。
5 运行变量的观察
运行过程中程序状态的监测实际上非常重要,常用的方法有打印输出,但是打印输出在有些情况下使用较为麻烦,有一定的局限性。
VS已经提供了观察变量、调用堆栈的窗口,如下图,通常在VS的下部。
窗口的左边部分包括了几个页面,分别是:
⏹自动窗口:这里面是系统自动根据当前状况列出一些相关的变量,数据
⏹局部窗口:显示当前运行所在位置相关的局部变量
⏹线程:列出当前所有的线程
⏹模块:列出系统调用的各个模块
⏹监视1:可以根据自己的需要把一些变量列进去,以便观察。
比如bucket1的地址,
这个在自动和局部窗口无法看到,这里可以通过&bucket1的方式增加进去。
窗口右边包含了如下几个页面:
⏹调用堆栈:列出了当前程序位置的调用过程,从下往上,可以观察到从到达当前函
数的路径。
通常程序运行错误的时候就可以观察这里,找到程序停止的位置,帮助确定设置断点的位置等。
⏹断点:列出了所有设置的断点
⏹输出:没什么好说的,就是一些加载输出等。
作者:fjnuzs@。