vs2008简单调试方法
- 格式:pdf
- 大小:589.22 KB
- 文档页数:7
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开发设置与调试复制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包含头文件,这对异步模式尤为重要。
命令名快捷键说明调试.应用代码更改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 文件。
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)演练:创建和使用动态链接库在本演练中,您将创建一个动态链接库(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 应用程序向导”的“应用程序设置”页中,选择“附加选项”下的“空项目”。
按“完成”创建项目。
向动态链接库添加类若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。
*假设调试机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 使用小技巧提高编程效率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,同样适用于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@。