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
VS2008远程调试
*假设调试机IP 192.168.0.182 远程机IP 192.168.0.161*远程机为调试机分配权限,使调试机可以使用远程桌面登陆到远程机器上(这样调试起来方便)。
*调试机上安装visual studio .net 2003共享调试机上的Visual Studio上的远程调试目录(以我的机器为例)C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\Debugger*远程机将上面的共享目录考贝到本地,比如:d:\\Debugger*调试机共享要调试的程序所在目录,比如:D:\important\cvsroot\dv-to-dvd\bin\debug*远程机将调试机上的目录影射为本地目录。
比如:Z:\\*远程机上以命令行形式执行D:\\Debugger\msvcmon.exe –tcpip –anyuser*调试机启动vc. 打开要调试的工程。
比如dvtodvd. 选择菜单project->properties选debuging->remote settingConnection :Remote via TCP/IP (Native only)Remote machine: 192.168.0.161Remote Command: z:\dvtodvd.exe*debug->start*就可以调试了。
1.首先将要调试的应用程序拷贝至远程机,选择拷贝路径如:D:/XXX/XXX/2.将本地工作上VS2008的安装目录下的调试监控工具msvsmon.exe拷贝到远程机上,如:X:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/Remote Debugger/下的x86文件夹整个拷贝到远程机上。
3.双击远程机上的msvsmon.exe,选择tools--->Options--->Authentication Mode--->No Authentication(native only)--->OK4.VS2008设置具体如下:调试机启动VS2008. 选择project->properties然后:Configuration Properties: Debugging.Remote Command: 远程机上需要被调试的应用程序的全路径,比如:D:/XXX/XXX/urpro.exe。
VS2008 使用小技巧 提高编程效率
VS2008 使用小技巧提高编程效率1. 怎样调整代码排版的格式?选择:编辑—>高级—>设置文档的格式或编辑—>高级—>设置选中代码的格式。
格式化cs代码:Ctrl+k+f 格式化aspx代码:Ctrl+k+d2. 怎样跳转到指定的某一行?两种方法:Ⅰ. Ctrl+G Ⅱ. 单击状态栏中的行号3. 怎样创建矩形选区?两种方法:Ⅰ. 摁住alt键,然后拖动鼠标即可。
Ⅱ. 按住Shift+Alt点击矩形的左上和右下位置即可。
4. 怎样快速隐藏或显示当前代码段?Ctrl+M,M5. 怎样快速切换不同的窗口?Ctrl+Tab6. 怎样生成解决方案?Ctrl+Shift+B7. 怎样快速添加代码段?输入prop然后按两次tab即可插入自动属性public int MyProperty { get; set; },(输入try,class,foreach等等,按两次tab也有类似效果。
)8. 怎样调用智能提示?两种方法:Ⅰ. Ctrl+J Ⅱ. Alt+→9. 怎样调用参数信息提示?光标放到参数名上面,然后输入Ctrl+Shif+空格。
10. 怎样查看代码的详细定义?打开:视图—>代码定义窗口然后你再在页面中把鼠标点到某个方法上。
11. 怎样创建区域以方便代码的阅读?#region代码区域#endregion12. 怎样同时修改多个控件的属性?选中多个控件,然后右键属性,这个时候这些控件共有的属性就会出现,修改之后所有的控件都会变化。
13. 怎样快速添加命名空间?对于引用了dll,但代码中没有引用其命名空间的类,输入类名后在类名上按Ctrl+.即可自动添加该类的引用命名空间语句。
14. 怎样实现快速拷贝或剪切一行?光标只要在某行上,不用选中该行,直接按Ctrl+c 或Ctrl+x 就可以拷贝或剪切该行。
15. 怎样使用任务管理器?假如我们开发的项目很大,在项目中有些代码没有完成,我们可以做一下标记,便于将来查找。
vs2008简单调试方法
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。
VS2008基本调试技巧与UT初步
逐语句调试
在调用函数的情况下,逐过程调试将执 行函数,然后跳过函数体。
F11逐语句调试 能够看到函数体内的代码逐句执行的情况。
加入WriteLine输出语句。
断言的使用
Debug类(命名空间System.Diagnostics) Debug.Assert(表达式,string str)
添加单元测试项目
直接在解决方案中添加一个新的项目, 选择项目类型为“测试项目”。
单元测试的基本方法是调用被测试代码 的函数,输入函数的参数值,获取返回 结果,然后与预期的测试结果进行比较, 如果相等则认为测试通过,否则认为测 试不通过。
Assert类的使用
在单元测试中,.NET提供了Assert类,用于验 证指定的功能是否满足条件。
从被测代码直接生成单元测试 添加单元测试项目
从被测代码直接生成单单元测试”选项。
在弹出的“创建单元测试”窗口中选择被测方 法,点击“确定”。
在新界面中输入需要创建的单元测试项目的名 称,然后单击“创建”按钮。
从被测代码直接生成单元测试
VS 2008 基本调试技巧与UT初步
断点设置
F9快速断点设置
调试输出
F5调试输出
变量监视
调用堆栈
逐过程调试
在断点处,如果希望继续执行程序,则 可按F5键,程序会运行到下一个断点的 代码行处。
如果要一步步查看程序的执行情况,以 及变量、属性值等,则可按F10键(逐过 程调试的快捷键)。
表达式:“测试条件” str:“提示消息” Debug.Assert(this.textBox1.Text.Length > 0, "输入值为空!"); 在断言中不要调用程序中的方法,避免与程序 发生功能联系。
VS2008的IDE环境中对应用程序进行调试的方法
发 环 境 所 继 承 的应 用 程 序 调 试 工 具 进 行 程 序 的 调试 工作 。 对 V 2 O 从 S 0 8的 开 发 环 境 的 介 绍 谈 起 , VS 08的 I E环 境 中对 应 用 程 就 2O D
序 进 行 调 试 的 方 法 进 行 了说 明 , 后对 V 2 0 最 S O 8的 I E环 境 中 应 用 程 序 进行 调试 的 步 骤 进 行 了 分 析 。 D
关 键 词 : 2 o D 应 用 程 序 , 试 VS o 8I E, 调
中图分类号 : TP3 1 5 1.2 文献标识码 : A
Ana y i f Pr g a bu g ng M e h ds i DE l s s o o r m De g i t o n I
Env r nm e f V¥ 0 8 io nto 2 0
唐 婧 , 武 初 赵
4 50 ) 1 00
( 常德 职 业 技术 学 院 , 南 常德 湖
摘
要 : 2 o 是 当前 软件 开 发 常用 的 开 发 环 境 , 中在 VS 0 8D 下 进 行 程 序 的开 发 , 序 开发 人 员 可 以 很 好 地 利 用 该 开 VS o 8 其 20IE 程
改 。链 接错 误来 源 很多 , 常常 由于和 系统 、 函数等 方 库
面 的 原 因 出 错 , 以 一 言 蔽 之 。最 后 是 逻 辑 错 误 , 是 难 这
程序 开 发人 员 在 进行 程 序开 发 时所 碰 到 的难 点 , 因为 系统 没 有 给 出 明确 的提 示 , 程序 开 发人 员 也 只是 知 道
的, 而且 编 译 给出 的提示 信息 也 比较 完整 , 以容易 修 所
持 . T rme r 3 5 NE fa wok . ,并 且 对 以 前 . T NE f me r r wok版本 进行 支持 。同时 , VB . a 在 3 5和 c#3 5 .
在VS2008下编译调试QtWebKit
在VS2008下编译调试QtWebKit安装环境1.安装VS2008,最好打上各种补丁比如:∙Microsoft Visual Studio 2008 Service Pack 1 (iso)(/downloads/en/details.aspx?displaylang=en&FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61)∙Visual Studio 2008 Service Pack 1 ATL Security(/downloads/en/confirmation.aspx?familyid=294DE390-3C94-49FB-A014-9A38580E64CB&displaylang=en)2.安装 GNU tools (Install from /packages.html):∙Bison 2.3∙Gperf 3.0.3∙Flex 2.5.34∙LibIconv注意安装路径不能有空格 (i.e. not in "C:\Program Files")我安装到了C:\ProgramFiles\GnuWin32\bin3.安装ActivePerl(/Products/ActivePerl/)4.安装Cygwin( /repository/webkit/trunk/WebKitTools/CygwinDownloader/cygw in-downloader.zip)编译QT1.下载源代码 /downloads/windows-cpp-vs20082.设置环境变量 QTDIR=C:\work\WebKit\qt-everywhere-opensource-src-4.6.33.给Path追加环境变量 Path=Path;%QTDIR%\bin4.打开VS的命令行窗口Visual Studio 2008 Command Prompt5.执行:cd %QTDIR%6.执行:congifure -release –shared –platform win32-msvc20087.执行:nmake (漫长的等待...)编译QtWebkit1.下载webkit(/builds/trunk/win/1),我用的版本是WebKit-r667182.解压webkit到C:\work\WebKit\WebKit-r66718(这是我用的目录,可以解压到任意目录下)3.下载WebKitSupportLibrary.zip并放到webkit根目录C:\work\WebKit\WebKit-r66718下,记得无需解压,下载地址:/opensource/internet/webkit_sptlib_agree.html4.C:\work\WebKit\WebKit-r66718目录下建立WebKitBuild、WebKitBuild\Release、WebKitBuild\Debug三个目录,注意保持大小写。
VS2008-2010上机操作指南2_如何调试程序
本次指南的目的在于学习如何进行断点调试,看看程序运行中的变量变化值是否跟我们预想的一样,从而找出错误。
下面的例子以S=1!+2!+…+n!为例。
1、按“信计11级上机操作指南第一次”的步骤输入源程序,检查没有语法错误后,按【crtl+F7】编译;如图1所示:图12、将光标移动到需要加断点的程序所在行,本程序的目的在于,要看看m和sum 的变化值,因此将光标移动到“sum=sum+m;”这一行前,并按下【F9】键,将在这一行前出现一个红色的断点,如图2所示:图23、按【F5】开始调试程序,程序会停留在断点的位置,点击窗口下部的【自动窗口】可以看到变量的值。
如图3所示:图3此时我们可以看到sum的值是一个非法值,其原因是我们没有将sum初始化;按【shift+F5】终止调试,然后将sum初始化为0. 按【crtl+F7】编译后,再按【F5】开始调试,程序会停留在断点的位置,如图4所示,点击【自动窗口】此时可以看到sum的值正常了。
4、按【F10】开始单步执行程序,可以看到变量的变换情况;5、持续按【F10】,当程序执行到最后一个右花括号“}“时,按按【shift+F5】终止调试。
6、按【ctrl+F10】可以执行到光标所在位置。
例如在上题中,如果将光标置于“cout<<sum<<”\n”前,按【ctrl+F10】可以直接执行到这一句。
7、有时候,需要输入数据,则需要在黑屏幕的输入窗口(其实就是控制台)和VS的调试窗口中进行切换,才能正常进行调试。
如以下程序,当程序运行到”cin>>n”时,按【F10】会弹出黑屏幕输入窗口,如下图:在黑屏幕输入窗口中输入数据,并按回车键,如下图此时,需要重新点击任务栏上的VS图标,激活调试窗口,才能继续调试。
继续按【F10】,当运行到while循环中的cin>>n时,又会弹出输入窗口,重复以上步骤进行调试。
9、若程序中有子函数,当程序运行到子函数所在行时,按【F11】进入子函数进行调试,子函数运行完后,按【shift+F11】返回主函数。
VS2008在wince下远程调试使用
VS2008在wince下远程调试使用下面来说一下具体的做法。
先明确下概念,远程调试嘛,自然是两个机器之间调试。
程序运行在目标机器上,调试器运行在本机。
首先利用网线把本机和目标机器通讯上,即把两者的IP地址设置在同一个网段,例如本机:192.168.128.2,目标机器192.168.128.1。
GUC端wince配置1. 从本机(已安装VS2008)C:/Program Files/Common Files/Microsoft Shared/CoreCon/1.0/Target/wce400/x86下复制一下文件到GUC 端:/Windows下,另外需要注意的是:windows文件夹下的非系统文件在重启后会消失,所以每次重启后都要重新拷贝文件到windows,建议把文件在Hard Disk 备份一份,需要的时候再拷贝过去。
Clientshutdown.exeConmanClient2.exeCMaccept.exeeDbgTL.dllTcpConnectionA.dll2. 在GUC端启动ConmanClient2.exe3. 在GUC端启动CMaccept.exe (双击打开就行,不会弹出任何提示)本机Visual Studio2008配置1、在本机上安装ActiveSync和GUC_SDK,默认直接安装就行。
2、打开VS2008,新建项目。
3、选择“智能设备”并给程序命名,例如:test。
4、选择平台类型—GUC5、编写程序代码,添加链接库,并编译通过。
6、编译成功后,打开“设备选项”,根据下图设置。
7、打开“连接到设备”,本机会跟GUC自动建立连接,下面是几种连接情况:A、没安装ActiveSync,安装上ActiveSync就可以解决。
B、设备未就绪,GUC端ConmanClient2.exe和CMaccept.exe未启动,双击启动ConmanClient2.exe和CMaccept.exe。
VS的10个调试技巧
Visual Studio原生开发的10个调试技巧最近碰巧读了Ivan Shcherbakov写的一篇文章,《11个强大的Visual Studio调试小技巧》。
这篇文章只介绍了一些有关Visual Studio的基本调试技巧,但是还有其他一些同样有用的技巧。
我整理了一些Visual Studio(至少在VS 2008下)原生开发的调试技巧。
(如果你是工作在托管代码下,调试器会有更多的特性,在CodeProject中有介绍它们的文章),下面是我的整理的一些技巧:1. 异常中断| Break on Exception2. Watch窗口中的伪变量| Pseudo-variables in Watch Windows3. 符号越界后查看堆对象|4. 查看数组的值5. 避免进入不必要的函数6. 从代码启动调试器| Launch the debugger from code7. 在Output窗口打印8. 隔离内存泄漏9. 调试发行版| Debug the Release Build10. 远程调试技巧1:异常中断在处理被调用之前,异常发生时可以启动调试器进行中断,可以让你在异常发生后立即调试程序。
操作调用栈便于你去查找异常发生的根本原因。
Vistual Studio允许你去指定想要中断的异常类型或者特殊异常。
选择菜单Debug>Exceptions弹出对话框,你可以指定原生的(或者托管的)异常,除了调试器自带的一些默认异常,你还可以添加自己的自定义异常。
下面是一个std::exception 异常抛出时调试器中断的例子。
∙1.异常抛出时如何中断∙2.如何添加新的异常技巧2:Watch窗口中的伪变量Watch窗口或QuickWatch对话框提供一些特定的(调试器可识别的)变量,被称为伪变量。
文档包含以下:∙$tid—–当前线程的线程ID∙$pid——进程ID∙$cmdline———-启动程序的命令行字符串∙$user———-正在运行程序的账户信息∙$registername—–显示寄存器registername 的内容不管怎么样,关于最后一个错误的伪变量是非常有用的:∙$err——–显示最后一个错误的错误码∙$err,hr—显示最后一个错误的错误信息技巧3:符合越界后查看堆对象有时候,在调试符号越界后,你还想查看对象的值,这个时候,watch窗口中的变量是被禁用的,不能再查看(也不能更新),尽管对象仍然存在。
怎样调试VS2008
一:F9在你需要停下的地方设置断点F5进入调试F10单步运行F11进入函数二:看不到自己设的各个变量的当前值设断点,等运行到那后,你想看哪个就把鼠标放到它上面就显示出来了三:如何使用V isual C++调试程序?在调试中可以使用断言、TRACE 宏输出结合单步执行来综合调试。
1、如何使用编译、连结的出错信息在编译、连结阶段Ou tpu t 窗口会向我们输出当前编译的信息,如果遇到错误,它会向我们报告错误在第几行、是什么错误。
这时在错误提示行上双击左键,就可以定位到程序中的出错处,此时就可以根据出错提示修改我们的代码。
如这个例子中是一个语法错误——漏写了一个分号。
当然,有时真正的错误并不在该行(通常是由某几个错误之间的相关性导致)。
这就需要我们在附近几行仔细察看。
如果对所报错误不太理解,可以加亮该错误提示行,然后按F1键,则可察看该错误的较详细解释。
(当然,前提是你的英文水平不错)2常见错误:☆语法错误:请检查是否缺少了分号(行结束符),if、else是否匹配、switch 语句用法是否对等。
注意,宏定义、包含文件定义结束不需分号,而类定义结束需要分号。
☆变量、函数未定义、重定义:请检查变量大小写、是否包含了相应的头文件(包括你自己的和MFC、Windows 的)。
☆连接错误:这种错误一般发生在你的程序中使用了动态连结库(dll)的时候(不管是你的还是Windows本身的)。
此时,可以察看是哪个函数出错。
比如你调用了一个Wind ows API,而MSDN中的说明写到这个函数需要包含哪个头文件(.h)、输入哪个库(.lib),那么就要在你的工程设置里加入这个库。
方法是选择菜单:Project->Settings,转到Link选项卡,在Object/Library modules 输入框中输入相应的模块如果我们改正了所有的错误,编译通过了,但结果不正确,那么我们就必须使用调试的办法了。
主要有两种。
- 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@。