VC调试方法Word下载.docx
- 文档编号:17348105
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:12
- 大小:32.28KB
VC调试方法Word下载.docx
《VC调试方法Word下载.docx》由会员分享,可在线阅读,更多相关《VC调试方法Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
F9:
设置(取消)断点
Alt+F9:
高级断点设置
跟踪调试
1、
尽量使用快捷键时行调试
2、
观察调试信息
3、
高级中断设置
异常调试
重试->
取消->
调试
函数堆栈,用variables或者callstack窗口
VC6.0Debug调试总结
1.如何显示Debug工具栏窗口?
①:
在任意工具栏的位置,单击鼠标右键,勾选Debug项
②:
Tools---->
Customize--Toolbars--Debug--close
引申:
工具栏和工具条的区别?
一个工具栏可以放置多个工具条。
2.关于断点调试
设置或去除断点。
如果当前行未设置断点,按F9可在当前行设置断点,如果当前行已设置断点,按F9则为去除断点设置。
Alt+F9:
调出断点设置窗口
在这个窗口里可以设置断点,去除所有已经设置的断点或者单个断点,也可以转到已设置的断点处,通过按钮EditCode,可以设置需要被计算的表达式,可以设置,监视(Watch)数组或结构体元素的个数,可以在窗口过程函数中设置断点,可以为任何一个想要监视(Watch)的消息(Message)设置一个断点。
3.关于开始调试
Build--StartDebug--Go
②:
F5
注:
F5有两层含义。
对于非调试阶段,按F5用于开始调试。
对于调试阶段(已经进入调试阶段),按F5用于运行程序到下一个断点处
4.关于停止调试
一旦按F5之后进入调试阶段,IDE编辑器上就会增加一个Debug菜单选项(里面包含一些常用调试手段)
这里列出不常见的两个,有Exceptions,Threads,Modules,可以通过点击Modules进入ModuleList对话框,在这里可以看到一些模块(Module),如kernel32.dll,可以Googlekernel32.dll的一些信息。
。
这里略过,我也不是很熟悉。
--b,欢迎大牛补充。
都说说是怎么用的。
Debug--StopDebugging
②:
Shift+F5
5.关于重新开始调试(或者说重头开始调试)
这个功能既可以在调试阶段使用,也可以在非调试阶段使用,用于进入调试阶段。
在调试阶段,它的功能如下:
(即不停止调试的情况下)
如果在一个程序里有多个断点,比如断点1、断点2、。
断点5.首先,按F5调试,进
入调试阶段,程序首先执行到断点1处,如果再按F5就会执行到断点2处,依次类推,直到断点5处,如果当程序执行到断点5处,再按F5,则程序不会再中断,程序完全运行起来。
可是,在调试阶段,如何从断点2~断点5处之间的任意一个断点跳到断点1处去重新执行呢?
比如,程序已经执行到断点4处,现在程序员想回到断点1处,重新再查看(监视)每个断点处的情形(也许是他记性不好,也许是他眼花了,也许是他操作太快,比如多按了几下F5键(*^__^*)……,这种情况大家也碰到过吧,往往很多人选择了,停止调试,再重新开始进入调试,再重新来一遍,当然,这样可以,只是有点麻烦。
)
现在,其实还有一种方法。
我之前也没发现。
--b。
在这种情况下,就可以用重新开始调试了(注意,这个重新开始调试是指再不停止调试的情况下,重新开始调试),比如,现在在断点4处,想回到断点1处,就可以按Ctrl+Shift+F5(重新开始调试的快捷键)
①:
Debug--Restart
②:
Ctrl+Shift+F5
6.关于单步调试
前提条件---调试阶段
①:
Debug--StepInto(F11)
逐语句。
(例如,遇到函数调用时会进入被调函数)
Debug--StepOver(F10)
逐过程(例如,遇到函数调用语句时,不会进入被调函数)
③:
Debug--StepOut(Shift+F11)
跳出过程调用(例如,当F11逐语句进入被调函数后,按Shift+F11会跳出被调函数)
④:
Debug--RuntoCursor(Ctrl+F10)
运行到光标所在位置。
(注:
貌似执行只能向前不能向后,即光标定位不能在已经执行过的代码里),经测试,如果光标在已执行的代码里,按Ctrl+F10则程序会完全执行起来,猜测。
是不是执行完程序,再重新,从头开始执行到光标处,貌似显示的是没执行到光标处。
--b欢迎批评补充。
7.关于变量监视
Debug--QuickWatch(Shift+F9)
调出QuickWatch对话框,添加要监视查看(watch)的表达式(expression),然后
AddWatch,程序之后就会监视该表达式
View--DebugWindows---Watch(Alt+3)
监视你设置的需要被监视的变量。
View--DebugWindows---Variables(Alt+4)
监视所有变量。
注:
View下的DebugWindows下的所有项均在Debug工具条中有。
VC中TRACEASSERTVERIFY之用法
一、TRACE宏
当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了。
但在程序的Release版本中,它们是被完全禁止的。
下面是一个典型的TRACE语句:
…
intnCount=9;
CStringstrDesc("
total"
);
TRACE("
Count=%d,Description=%s\n"
nCount,strDesc);
可以看到,TRACE语句的工作方式有点像C语言中的printf语句,TRACE宏参数的个数是可变的,因此使用起来非常容易。
如果查看MFC的源代码,你根本找不到TRACE宏,而只能看到TRACE0、TRACE1、TRACE2和TRACE3宏,它们的参数分别为0、1、2、3。
个人总结用法如下:
1.在MFC中加入TRACE语句
2.在TOOLS->
MFCTRACER中选择“ENABLETRACING”点击OK
3.进行调试运行,GO(F5)(特别注意:
不是执行‘!
’以前之所以不能看到TRACE内容,是因为不是调试执行,而是‘!
’了,切记,切记)
4.然后就会在OUTPUT中的DEBUG窗口中看到TRACE内容了,调试执行会自动从BUILD窗口跳到DEBUG窗口,在那里就看到TRACE的内容了
以下是找的TRACE的详细介绍:
==============================
TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;
该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消息了,从而帮助你调式也在RELEASE的时候减少代码量。
使用非常简单,格式如下:
TRACE("
DDDDDDDDDDD"
wewe%d"
333);
同样还存在TRACE0,TRACE1,TRACE2。
分别对应0,1,2。
个参数
TRACE信息输出到VCIDE环境的输出窗口(该窗口是你编译项目出错提示的哪个窗口),但仅限于你在VC中运行你的DEBUG版本的程序。
TRACE信息还可以使用DEBUGVIEW来捕获到。
这种情况下,你不能在VC的IDE环境中运行你的程序,而将BUILD好的DEBUG版本的程序单独运行,这个时候可以在DEBUGVIEW的窗口看到DEBUGVIE格式的输出了。
VC中TRACE的用法有以下四种:
1:
TRACE0,就是不带动态参数输出字符串,类似C的printf("
输出字符串"
2:
TRACE1中的字符串可以带一个参数输出,类似C的printf("
...%d"
变量);
3:
TRACE2可以带两个参数输出,类似C的printf("
...%d...%f"
变量1,变量2);
4:
TRACE3可以带三个参数输出,类似C的printf("
...%d,%d,%d"
变量1,变量2,变量3);
TRACE宏有点象我们以前在C语言中用的Printf函数,使程序在运行过程中输出一些调试信息,使我们能了解程序的一些状态。
但有一点不同的是:
TRACE宏只有在调试状态下才有所输出,而以前用的Printf函数在任何情况下都有输出。
和Printf函数一样,TRACE函数可以接受多个参数如:
intx=1;
inty=16;
floatz=32.0;
TRACE("
ThisisaTRACEstatement\n"
);
Thevalueofxis%d\n"
x);
x=%dandy=%d\n"
x,y);
x=%dandy=%xandz=%f\n"
x,y,z);
要注意的是TRACE宏只对Debug版本的工程产生作用,在Release版本的工程中,TRACE宏将被忽略。
二、ASSERT宏
如果你设计了一个函数,该函数需要一个指向文档对象的指针做参数,但是你却错误地用一个视图指针调用了这个函数。
这个假的地址将导致视数据的破坏。
现在,这种类型的问题可以被完全避免,只要在该函数的开始处实现一个ASSERT测试,用来检测该指针是否真正指向一个文档对象。
一般来讲,编程者在每个函数的开始处均应例行公事地使用assertion。
ASSERT宏将会判断表达式,如果一个表达式为真,执行将继续,否则,程序将显示一条消息并且暂停,你可以选择忽视这条错误并继续、终止这个程序或者是跳到Debug器中。
下面一例演示了如何使用一个ASSERT宏去验证一个语句。
voidfoo(charp,intsize)
{
ASSERT(p!
=0);
//确认缓冲区的指针是有效的
ASSERT((size>
=100);
//确认缓冲区至少有100个字节
//Dothefoocalculation
}
这些语句不产生任何代码,除非—DEBUG处理器标志被设置。
VisualC++只在Debug版本设置这些标志,而在Release版本不定义这些标志。
当—DEBUG被定义时,两个assertions将产生如下代码:
//ASSERT(p!
do{
if(!
(p!
=0)&
&
AfxAssertFailedLine(—FILE—,—LINE—))
AfxDebugBreak();
}while(0);
//ASSERT((size〉=100);
do{
if(!
(size〉=100)&&AfxAssertFailedLine(—FILE—,—LINE—))
}while(0);
Do-while循环将整个assertion封装在一个单独的程序块中,使得编译器编译起来很舒畅。
If语句将求取表达式的值并且当结果为零时调用AfxAssertFailedLine()函数。
这个函数将弹出一个对话框,其中提供三个选项“取消、重试或忽略”,当你选取“重试”时,它将返回TRUE。
重试将导致对AfxDebugBreak()函数的调用,从而激活调试器。
AfxAssertFailedLine()是一个未正式公布的函数,它的功能就是显示一个消息框。
该函数的源代码驻留在afxasert.cpp中。
函数中的—FILE—和—LINE—语句是处理器标志,它们分别指定了源文件名和当前的行号。
三、VERIFY宏
因为assertion只能在程序的Debug版本中起作用,在表达式中不可以包含赋值语句、增加语句(++)或者是减少语句(--),因为,这些语句实际改变数据。
可有时你可能想要验证一个能动的表达式,使用一个赋值语句。
那么就到了用VERIFY宏来替代ASSERT。
例如:
voidfoo(charp,intsize)
char�q;
VERIFY(q=p);
ASSERT((size〉=100);
}
在Debug模式下,ASSERT和VERIFY是一回事,但是在Release模式下,VERIFY宏仍然测试表达式而assertion却不起任何作用。
可以说,在Release模式下,ASSERT语句被删除了。
请注意,如果你在一个ASSERT语句中错误地使用了一个能动的表达式,编译器将不做任何警告地忽略它。
在Release模式下,该表达式就会被无声息地删除掉,这将会导致程序的错误运行。
由于Release版的程序通常不包含Debug信息,这类错误将很难被发现。
VC++中MessageBox的常见用法详解
消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合。
1.MessageBox("
这是一个最简单的消息框!
"
2.MessageBox("
这是一个有标题的消息框!
"
这是标题"
3.MessageBox("
这是一个确定取消的消息框!
MB_OKCANCEL);
4.MessageBox("
这是一个警告的消息框!
MB_ICONEXCLAMATION);
5.MessageBox("
这是一个两种属性的消息框!
MB_ICONEXCLAMATION|MB_OKCANCEL);
6.if(MessageBox("
一种常用的应用"
MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
return;
附其它常用属性:
系统默认图标,可在消息框上显示
X错误MB_ICONHAND,MB_ICONSTOP,andMB_ICONERROR
?
询问MB_ICONQUESTION
!
警告MB_ICONEXCLAMATIONandMB_ICONWARNING
i信息MB_ICONASTERISKandMB_ICONINFORMATION
按钮的形式
MB_OK默认
MB_OKCANCEL确定取消
MB_YESNO是否
MB_YESNOCANCEL是否取消
返回值
IDCANCEL取消被选
IDNO否被选
IDOK确定被选
IDYES是被选
注意:
以上消息框的用法是在CWnd的子类中的应用,如果不是,则要MessageBox(NULL,"
ddd"
MB_OK);
或MessageBox(hWnd,"
hWnd为某窗口的句柄,或者直接用AfxMessageBox。
MessageBox对话框是比较常用的一个信息对话框,其不仅能够定义显示的信息内容、信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对框。
1、函数原型及参数
functionMessageBox(hWnd:
HWND;
Text,Caption:
PChar;
Type:
Word):
Integer;
hWnd:
对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
Text:
欲显示的信息字符串。
Caption:
对话框标题字符串。
Type:
对话框类型常量。
该函数的返回值为整数,用于对话框按钮的识别。
2、类型常量
对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。
(1)按钮组合常量
MB_OK=$00000000;
//一个确定按钮
MB_OKCANCEL=$00000001;
//一个确定按钮,一个取消按钮
MB_ABORTRETRYIGNORE=$00000002;
//一个异常终止按钮,一个重试按钮,一个忽略按钮
MB_YESNOCANCEL=$00000003;
//一个是按钮,一个否按钮,一个取消按钮
MB_YESNO=$00000004;
//一个是按钮,一个否按钮
MB_RETRYCANCEL=$00000005;
//一个重试按钮,一个取消按钮
(2)缺省按钮常量
MB_DEFBUTTON1=$00000000;
//第一个按钮为缺省按钮
MB_DEFBUTTON2=$00000100;
//第二个按钮为缺省按钮
MB_DEFBUTTON3=$00000200;
//第三个按钮为缺省按钮
MB_DEFBUTTON4=$00000300;
//第四个按钮为缺省按钮
(3)图标常量
MB_ICONHAND=$00000010;
//“×
”号图标
MB_ICONQUESTION=$00000020;
//“?
MB_ICONEXCLAMATION=$00000030;
//“!
MB_ICONASTERISK=$00000040;
//“i”图标
MB_USERICON=$00000080;
//用户图标
MB_ICONWARNING=MB_ICONEXCLAMATION;
//“!
MB_ICONERROR=MB_ICONHAND;
//“×
MB_ICONINFORMATION=MB_ICONASTERISK;
//“i”图标
MB_ICONSTOP=MB_ICONHAND;
//“×
(4)运行模式常量
MB_APPLMODAL=$00000000;
//应用程序模式,在未结束对话框前也能切换到另一应用程序
MB_SYSTEMMODAL=$00001000;
//系统模式,必须结束对话框后,才能做其他操作
MB_TASKMODAL=$00002000;
//任务模式,在未结束对话框前也能切换到另一应用程序
MB_HELP=$00004000;
//HelpButton
3、函数返回值
0 //对话框建立失败
IDOK=1 //按确定按钮
IDCANCEL=2 //按取消按钮
IDABOUT=3 //按异常终止按钮
IDRETRY=4 //按重试按钮
IDIGNORE=5 //按忽略按钮
IDYES=6 //按是按钮
IDNO=7 //按否按钮
二、在MessageBox中显示变量的值
CStringstring;
string.format("
%d%s"
m_age,m_address);
//将变量组装到字符串中
MessageBox(string,"
消息框标题"
消息框类型);
举例说明:
if(this->
MessageBox("
是否删除所有城市?
"
清空"
MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
{
this->
m_cityMap.Clear();
Invalidate(false);
运行效果:
注解:
AfxMessageBox用法与这里的MessageBox用法基本类似
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 调试 方法