F9——插入删除断点,断点位置为光标所在行
F5——go,开始运行,到断点会自动停止,没有断点,会运行完
F10——向前走一步,不进入函数内部
F11——向前走一步,如果由函数就进入内部
未开始调试的情况下,按F10或者F11,会自动开始调试,鼠标自动定位到头部
Shift+F11——如果进入了函数,执行到中间,想跳出来,就按这个
Ctrl+F10——运行到光标,个人觉得这个很好用,觉得哪一行可能会出问题,在这一行前点一下鼠标,然后按下这俩键,就运行到这里了,不用设置断点。
至于查值,说的是在上述调试运行到某一行的过程中,查看某个变量的值,这个可以通过下方出现的Variable和Watch窗口查看,Variable不能输入,自动出现相关变量的值,watch窗口,可以自己输入变量名称,查看运行到某一步时的变量值。
如果没有这两个窗口,可以在菜单栏右侧右键,勾选variable和watch,就会出现。在VS中按下CTRL+D+W,也会出现watch窗口。
暂时就想起这么多了,有机会再补充吧。
一、在keil中调试c语言程序
1、打开我们的程序,点击菜单栏右侧的start/stopdebug..按钮,进入调试模式,如下图。
2、左侧为寄存器窗口,右上方是汇编窗口,我们可以看到各个寄存器的数值和c语言对应的汇编代码,如下图。
3、点击单步执行按钮或者点击f11、f10,都可以进入单步执行模式,方便我们看程序流程和执行步骤,如下图。
4、点击菜单栏的串口按钮,我们来调试串口的输出,这里有很多对应的调试工具可供选择,如下图。
5、单步执行,我们看到各个窗口的变化,当直行到输出时,可以看到串口窗口有相应的字符输出,如下图。
6、再次点击start/stop按钮来停止调试,如下图。
二、用vs2012对C语言进行调试
1、要对编程环境左边的一条竖直的空开的地方进行点击,点击的是你要调试的相应的语句。
2、点击窗口上方的工具栏的调试界面,点击逐语句或逐过程,都没关系。
3、开始调试,在调试过程中每个调试语句都要按一次F5键,在键盘上按下,你可以看到执行的当前的语句中,左边位置的红点有个箭头。
4、在每次调试语句中,变量值发生改变时,下方的小界面都会显示出来,看是否正确。
5、不断地重复这个步骤,知道发现错误的地方为止。
6、发现错误后,停止调试,修改相应的代码,即完成此次调试。
异常响应
异常响应为开发者提供了一个按自己的需要进行异常处理的机制 try …except …end形成了一个异常响应保护块 与finally不同的是 正常情况下except 后面的语句并不被执行 而当异常发生时程序自动跳到except 进入异常响应处理模块 当异常被响应后异常类自动清除
下面的例子表示了文件打开 删除过程中发生异常时的处理情况
uses Dialogs
var
F: Textfile
begin
OpenDialog Title := Delete File
if OpenDialog Execute then
begin
AssignFile(F OpenDialog FileName)
try
Reset(F)
if MessageDlg( Erase +OpenDialog FileName + ?
mtConfirmation [mbYes mbNo] ) = mrYes then
begin
System CloseFile(F)
Erase(F)
end
except
on EInOutError do
MessageDlg( File I/O error mtError [mbOk] )
on EAccessDenied do
MessageDlg( File access denied mtError [mbOk] )
end
end
end
保留字on…do用于判断异常类型 必须注意的是 except后面的语句必须包含在某一个on…do模块中 而不能单独存在 这又是同finally不同的一个地方
使用异常实例
上面所使用的异常响应方法可总结为如下的形式
on ExceptionType do
{响应某一类的异常}
这种方法唯一使用的信息是异常的类型 一般情况下这已能满足我们的需要 但我们却无法获取异常实例中包含的信息 比如异常消息 错误代码等 假设我们需要对它们进行处理 那么就必须使用异常实例
为了使用异常实例 需要为特定响应模块提供一个临时变量来保存它
on EInstance : ExceptionType do …
在当前响应模块中我们可以象使用一个普通对象那样来引用它的数据成员 但在当前响应模块之外不被承认
下面的代码用于获取异常消息并按自己的方式显示它
{窗口中包括一个ScrollBar部件 一个Button部件}
procedure TErrorForm Button Click(Sender: TObject)
begin
try
ScrollBar Max := ScrollBar Min
except
on E: EInvalidOperation do
MessageDlg( Ignoring Exception: +E Message
mtInformation [mbOK] )
end
end
提供缺省响应
在异常响应模块中 一般我们只对希望响应的特定异常进行处理 如果一个异常发生而响应模块并没有包含对它的处理代码 则退出当前响应模块 异常类仍被保留
为了保证任何异常发生后都能在当前响应模块中被清除 可以定义缺省响应
try
{程序正常功能}
except
on ESomething do
{响应特定异常}
else
{提供缺省响应}
end
由于else可以响应任何异常 包括我们一无所知的异常 因此在缺省响应中最好只包括诸如显示一个消息框之类的处理 而不要改变程序的运行状态或数据
响应一族异常
诸如
on ExceptionType do
的异常响应语句不仅可响应本类异常 而且可以响应子类异常 对于象EIntError EMathError等系统不会引发的异常 它们将只响应其子类异常 而对于象
on Exception do
这样的语句将会对任何异常进行响应
下面一段代码对整数越界异常进行单独处理 而对其它整数异常进行统一处理
try
{整数运算}
except
on ERangeError do
{越界处理}
on EIntError do
{其它整数异常处理}
end
由于异常在处理后即被清除 因而上面的代码可保证不会使ERangeError异常被多次处理 假如颠倒两条响应语句的顺序 则ERangeError异常响应将永远没有被执行的机会
由于异常在处理后即被清除 因而当希望对异常进行多次处理时就需要使用保留字raise来重引发一个当前异常
lishixinzhi/Article/program/Delphi/201311/25188
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)