delphi调试技巧

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi调试技巧相关的知识,希望对你有一定的参考价值。

感觉断点不好使啊,还不如用showmessage呢,个人感觉好使,直观。。
找错都是,事件,或者函数为单位,着行排查的,多了感觉很累。。
大家有什么好办法没,或者有什么小技巧没,希望共享一下。

一般断点不好使是因为有些代码是不能设断点的,比如if with 等等系统保留的语句,另外就是不能在一些动态生成的代码里设断点,有些循环次数过多的语句也不太方便设断点,这种情况要自己写个记录log的类,将调试时需要显示的变量写入到log文件中然后事后查找log记录中的错误你才能分析出来错误原因,比如以前我写过一个视频播放软件里面有上百个过滤器你也不知道是哪个过滤器出错导致无法播放,这个时候你要是设断点的话调一天你也调不出来,这个时候就要自己写这种错误记录器了。 参考技术A 我一般都是使用断点的方法,调试感觉挺好的 参考技术B 断点挺好用的,代码可以单步执行,可以一下子运行到下一个断点,或者运行到鼠标光标的位置,

delphi debug技巧

Delphi开发的调试技巧
1、设置调试选项
  Delphi主菜单。【Project】->【Options】,或单击工程管理器中的【Project Options】按钮。显示Project Options,选择Complier

  <1>选中 Debug Information :把调试信息嵌入到DCU单元文件,会加大编译后的DCU文件,但不会影响最后生成的exe的大小和执行速度。同时激活【Search】菜单中的【Find Error】命令。
  当文件中包含调试信息并得到一个运行时错误(run-time error),记录下Delphi提供的16进制地址,在【Search】->【Find Error】中输入,Delphi将重新编译程序,并停留在产生错误的命令行。

  <2>Local symbols:决定调试器能否看到在Implementation中定义的局部变量。

  <3>Reference infoj选项/Definition Only选项
是否产生应用程序中对象标识符的引用信息。信息和对象代码存在dcu文件中,可以使用对象浏览器查看。如果Definition Only 选项同时选中,编译器将生成标识符定义位置的信息,能够激活对象浏览器的Refenrence页。如果不选,Dcu文件更小。

  编辑器命令
  {$D} Debug Information
  {$L} Local Information
  {$Y} Symbol Information
  {$C} Assertions

  2、使用内部调试器

  <1> 命令行参数
  在【Run】->【Parameters】中设置

  <2>断点

  条件断点
  使源代码断点只有在满足某个条件时才有效。
  在【View】->[Debug windows]->【BreakPoints】打开“BreakPoint List”对话框,右击断点,从弹出菜单中选择属性。打开“Source BreakPoint Properties”对话框,在Condition中输入条件,在对话框中点击按钮【Advanced】,可以设置更多选项,“Ignore Subsequent Exceptions”使调试程序遇到下一个断点时不中断;选中“Handle Subsequent Exception”则调试程序遇到下一个断点时恢复默认性能。
也可以通过【Run】->【Add BreakPoint】设置。

  数据断点
  特定地址的内存被修改时才使程序挂起。【Run】->【Add BreakPoint】->【Data BreakPoint】命令添加,或者在BreakPoint List对话框中右击,选择Add Data BreakPoint。输入监测内存区域的开始地址和长度(字节数)

  地址断点
  特定地址的代码执行时就使程序挂起。通常在CPU窗口中设置。

  模块加载地址
  在一个模块加载时使程序挂起。【Run】->【Add BreakPoint】

  断点组
  使用断点组,任何一个断点都能设置成使其他断点有效或无效,可以通过断点算法来查找特殊的错误。

  3、单步执行

  【Step Over】 (F8功能键),【Trace Into】(F7功能键),【Run to Cursor】(F4功能键)
临时使程序暂停【Program Pause】。
Ctrl+F5 【Add Watch】,Ctrl+F7 【Evaluate/Modify】

  4、其他工具

  <1>Debug Inspector 适合查看由许多数据组成的复合数据,诸如类和记录。单击省略号按钮,可以修改数据的值。
  <2>计算和修改Evaluate/Modify,可以改变变量的值,但不能访问超出域外的函数和变量。
  <3>访问调用栈 【View】->【Debug Windows】->【Call Stack】,可以看到函数和过程的调用情况及传递给他们的参数。
  <4>查看线程,如果应用程序运行了多线程,可以通过【View】【Debug Windows】【Threads】查看线程的状态,可以查看某一线程的源代码,选择当前线程。(ctrl+alt+t)
  <5>事件日志
记录调试期间发生的事情。【View】【Debug Windows】(ctrl+alt+v),可以在【Tools】【Debugger Options】对话框“Debugger”选项组或事件日志的本地菜单配置事件日志功能。记录的事件包括:进程开始、终止、模块加载断点、发给应用程序的Windows消息以及使用OutputDebugString()的输出。
  <6>模块视图
获取所有加载到应用程序进程中的模块。(ctrl+alt+m)
在过程、函数、事件内部, SHIFT+CTRL+向上的方向键  可跳跃到相应的过程、函数、事件的定义.相反,在过程、函数、事件的定义处,SHIFT+CTRL+向下的方向键 可跳跃到具体过程、函数、事件内部
CTRL+ SHIFT + C:编写申明或者补上函数.
如:
procedure TT.A(AA: string);  //函数申明
安下:CTRL+ SHIFT + C后,会写上
procedure TT.A(AA: string);
begin
end;

SHIFT+CTRL+E 显示 EXPLORER

crtl + shift + n (n=1,2,3,4......)
定义书签
crtl + n (n=1,2,3,4......)
跳到书签n

ALT+鼠标左键可以块选代码,删除对齐的重复代码非常有用。
Ctrl+B           Buffer List窗口。
Ctrl+I           同Tab键。
Ctrl+M           同Enter键。
Ctrl+N           同Enter键,但光标位置保持不变。
Ctrl+T           删除光标右边的一个单词。
Ctrl+Y           删除光标所在行。

Ctrl+Shift+↑    光标在函数体内时,将光标快速移至当前函数声明处。
Ctrl+Shift+↓    光标在函数声明行时,将光标快速移至函数定义处。
Ctrl+Shift+C     声明一个过程或函数后,直接生成过程或函数的名称、begin、end;
Ctrl+Shift+E     光标在Edit窗口和Explorer窗口间切换。
Ctrl+Shift+J     弹出Delphi语句提示窗口,选择所需语句将自动完成一条语句。
Ctrl+Shift+T     在光标行加入To-Do注释。
Ctrl+Shift+Y     删除光标之后至本行末尾之间的文本。

Ctrl+F3          Call Stack窗口。
Ctrl+F4          等于File菜单中的Close项。

Ctrl+鼠标转轮    加速滚屏。

Shift+F8         调试时弹出CPU窗口。
Shift+F10        等于鼠标右键(Windows快捷键)。

Alt+F4           关闭所有编辑框中打开的源程序文件,但不关闭项目。


CTRL+ENTER 定位到单元文件
Shitf+箭头 选择 
如果同时按住Alt +Shitf+箭头, 再进行选择, 则是一种区域选择, 而不是行选择, 粘贴的
时候也就是插入粘贴了. 
F9 运行 
CTRL+ F9编译
F8 STEP OVER (步进式调试不进入子过程)
F7 TRACE INTO (步进式调试同时追踪进入子过程)
F11,F12 切换EDITOR,INSPECTOR,FORM DESIGNER. 
CTRL+ALT+F11 弹出工程管理器 
CTRL+F弹出查找对话框
CTRL+R弹出替换对话框
CTRL+ Shitf+C 类过程代码补全(只要在定义部分定义一过程或一函数头则自动帮你生成
实现部分的套架;反之也成)
但是DELPHI 中怎样跳格呢? 其实也是有办法的, 就是CTRL+K,I向后, CTRL+K,U向前. 
有时候反复输入什么东西是不是很繁? CTRL+SHIFT+R录制键盘宏, 比如我经常做的就是: 
下箭头-下箭头-HOME-回车-CTRL+V, 再键入一次CTRL+SHIFT+R录制完成, 之后您可以使用
CTRL+SHIFT+P, 重复宏,还是省了一些事的. 
另外在DELIPHI中有一个很有用的快键极其有用
这就是CTRL+J;列如:在一过程中你输入ifb后再按CTRL+J你回去看看效果吧,可能你会大
吃一惊。这就是Code Insight.

ctrl+shift+u  //块缩进/反缩进 
ctrl+shift+i

取消书签: 在书签N处,再按一次 SHIFT + CTRL + N

Ctrl+E 一种查找挺好的,其余的都被你们说玩了


按住Ctrl再点对象、过程、函数,转到其定义原型,即便是Delphi VCL源代码中的Unit。


ALT+F4 关闭DELPHI [:D]

Ctrl+K+O,Ctrl+K+N  将选中的整块代码都转为小写或大写
Ctrl+F 查找
Ctrl+L 继续查找

在Inspector,可以用Ctrl+Tab切换Properties页和Events页
Ctrl+Enter可进入相应的设置,如在Preperties页的Font按Ctrl+Enter
在Events中按Ctrl+Enter可进入相应代码编辑


Ctrl+Shift+i : 同时推进2格
Ctrl+Shift+u : 同时退后2格[/red]

还有一招,我经常用的,不知大家常不常用
按住ALT用鼠标选择文本
或者按住ALT加SHIFT,用方向键选择文本
没试过就赶快去试试![:D]


在form上放一个tedit控件,然后在代码中写入“edit1.”,稍等一下,会出现提示。
在“edit1.”未写入前,要想使用这个提示功能,可以按住windows键,然后按空白键。
(只有windows键盘可以用此功能!)

 
CTRL+SPACE与输入法冲突,把输入法的有无输入法快捷键从CTRL+SPACE该为其他键组合
就行了,我是改成了CTRL+SHIFT+SPACE.
然后在UNIT中,比如输入fo这是按下CTRL+SPACE就会出现一系列以fo开头的变量,函数。

Ctrl+Backspace 后退删除一个词。好像是到 . 为止。

在object inspector窗口按tab键将光标移动到属性名区,然后键入属性名的开头
字母可快速定位到该属性

------------------------------------------------------------------------


一、以下快捷键指的是对窗体表格上组件的操作:
●快捷键1:
【Ctrl+UP】~向上移动当前组件(精确);
【Ctrl+Left】~向左移动当前组件(精确);
【Ctrl+Down】~向下移动当前组件(精确);
【Ctrl+Right】~向右移动当前组件(精确);
注:
以上快接键中再加Shift进行组合(比如【Ctrl+Shift+Right】)即可实现粗略调整;
●快捷键2:
【Shift+UP】~减小当前组件的高度;
【Shift+Left】~减小当前组件的宽度;
【Shift+Down】~增加当前组件的高度;
【Shift+Right】~增加当前组件的宽度;
注:
以上Up,Left等指的是方向键;


二、以下快捷键指的是在对象观察器上的操作:
●快捷键3:
【F11】~切换到对象观察器(注:如果连续按F11则将实现在对象观察器、窗体表格、代码编辑器之间切换);
【Ctrl+Down】~下拉当前窗体的组件列表;
【Ctrl+Enter】~编辑带...的属性值(如组件的字体TFont);
【Alt+Down】~下拉组件当前属性选单队列(如Align->alNone,alLeft,alRight等);
【Ctrl+Tab】~在属性列表及事件列表中切换;


三、菜单快捷键:
●快捷键4:
【F12】,【Shift+F12】,【Ctrl+F12】等在Delphi的菜单中已有定义的在此不必罗嗦.

技巧:
如何选择被组件覆盖了的窗体(比如某组件的Align属性为alClient)?
方法一、按ESC键,一层一层的往后选,直到窗体被选为当前组件为止;
方法二、按Shift的同时单击鼠标左键,一步即可选定(推荐);
方法三、按F11选定对象观察器,然后切换到属性列表,再用上面快捷键3中的【Ctrl+Down】

Ctrl+UP向上移动选中组件(微调);  Ctrl+Left向左移动选中组件(微调);
Ctrl+Down向下移动选中组件(微调)  ;Ctrl+Right向右移动选中组件(微调);
Shift+UP减小选中组件的高度;  Shift+Left减小选中组件的宽度;
Shift+Down增加选中组件的高度;  Shift+Right增加选中组件的宽度;

Ctrl+鼠标拖动 可以选中一个控件上层的其他控件而不选中其本身!

DELPHI中的快捷方式一览(完全正式版)
1.SHIFT+鼠标左键    先选中任一控件,按键后可选中窗体(选中控件后按Esc效果一样)
2.Shift+F8          调试时弹出CPU窗口。
3.Shift+F10         等于鼠标右键(Windows快捷键)。
4.Shitf+箭头        选择
5.shift +F12        快速查找窗体并打开
6.F7               (步进式调试同时追踪进入子过程)
7.F8               (步进式调试不进入子过程)
8.F9                运行
9.F12               切换EDITOR,FORM
10.Alt+F4           关闭所有编辑框中打开的源程序文件,但不关闭项目
11.ALT+鼠标左键      可以块选代码,用来删除对齐的重复代码非常有用
12.Ctrl+F9          编译
13.Ctrl+shift+N(n=1,2,3,4......)  定义书签
14.Ctrl+n(n=1,2,3,4......)跳到书签n
15.CTRL +SHIFT+N    在书签N处,再按一次 取消书签
16.Ctrl+PageUp      将光标移至本屏的第一行,屏幕不滚动
17.Ctrl+PageDown    将光标移至本屏的最后一行,屏幕不滚动
18.Ctrl+↓          向下滚动屏幕,光标跟随滚动不出本屏
19.Ctrl+↑          向上滚动屏幕,光标跟随滚动不出本屏
20.Ctrl+Home        将光标移至文件头
21.Ctrl+End         将光标移至文件尾
22.Ctrl+B           Buffer List窗口
23.Ctrl+I           同Tab键
24.CTRL+J           (弹出Delphi语句提示窗口,选择所需语句将自动完成一条语句)代码模板
25.Ctrl+M           同Enter键。
26.Ctrl+N           同Enter键,但光标位置保持不变
27.Ctrl+T           删除光标右边的一个单词
28.Ctrl+Y           删除光标所在行
29.CTRL+C           复制
30.CTRL+V           粘贴
31.CTRL+X           剪切
32.CTRL+Z           还原(Undo)
33.CTRL+S           保存
34.Ctrl+F           查找
35.Ctrl+L           继续查找
36.Ctrl+r           替换
37.CTRL+ENTER       定位到单元文件
38.Ctrl+F3          弹出Call Stack窗口
39.Ctrl+F4          等于File菜单中的Close项
40.Ctrl+Backspace   后退删除一个词,直到遇到一个分割符
41.Ctrl+鼠标转轮    加速滚屏
42.Ctrl+O+U         切换选择块的大小写(注意松开O后再按U,Ctrl保持按下)
43.Ctrl+K+O         切换选择块为小写(注意松开K后再按O,Ctrl保持按下)
44.Ctrl+K+N         切换选择块为大写(注意松开K后再按N,Ctrl保持按下)
45.Ctrl+Shift+G     插入GUID
46.Ctrl+Shift+T     在光标行加入To-Do注释
47.Ctrl+Shift+Y     删除光标之后至本行末尾之间的文本
48.CTRL+SHIFT+C     编写申明或者补上函数,绝好!!!
49.CTRL+SHIFT+E     显示EXPLORER
50.Ctrl+Tab         在Inspector中切换Properties页和Events页
51.CTRL+SHIFT+U     代码整块左移2个空格位置
52.CTRL+SHIFT+I     代码整块右移2个空格位置
53.CTRL+SHIFT+↑    在过程、函数、事件内部, 可跳跃到相应的过程、函数、事
                     件的定义(在interface和implementation之间来回切换)
54.CTRL+SHIFT+↓    在过程、函数、事件的定义处, 可跳跃到具体过程、函数、事件内部(同上)
55.Tab              在object inspector窗口按tab键将光标移动到属性名区,然后键入属性名的开头
                     字母可快速定位到该属性
56.Ctrl+Alt         按着Ctrl+Alt之后,可用鼠标选择一个矩形块中的代码,
                     并可比它进行复制,粘贴
57.Shift+↓、↑、→、← 以1像素单位更改所选控件大小
58.Ctrl+↓、↑、→、←以1像素单位更改所选控件位置
59.Ctrl+E           快速选择(呵呵,试试吧,很好玩的)                                                           
---------GExperts中---------
60.Ctrl+Alt+c       注释块
61.Ctrl+Alt+u       取消注释块
62.Ctrl+Alt+h       生成头(更详细的设置在GExperts配置的Editor Experts属性页)
63.Ctrl+Alt+o       选择对应分隔符之间的语句
64.Ctrl+Alt+v       在对应的分隔符之间来回跳转(与已有快捷键有冲突,请更改)
---------GExperts中---------

Ctrl+Alt+[left arrow] 在Gexpert里快速选定begin与其对应end之间所有代码的方法。
Alt + F11 在出现的窗口中选择一个unit将在当前unit的implementation部分自动uses你刚才选择的unit































































































































































































































































































以上是关于delphi调试技巧的主要内容,如果未能解决你的问题,请参考以下文章

有哪些 JS 调试技巧?

Chrome调试折腾记_JS断点调试技巧

lua-调试技巧

lua-调试技巧

lua-调试技巧

lua-调试技巧