p_qry+debugger
- 格式:pdf
- 大小:8.02 MB
- 文档页数:53


PycharmDebug调试(纯⼲货)
使⽤Debug调试代码
1.打断点
⼀个断点标记了⼀个代码⾏,当Pycharm运⾏到该⾏代码时会将程序暂时挂起。
注意断点会将对应的代码⾏标记为红⾊,取消断点的操作也很简单,在同样位置再次单击即可。如图所⽰,打了两个断点当你将⿏标指针悬停在断点上⽅时,Pycharm会显⽰断点的关键信息,⾏号以及脚本属性,如果你希望更改该断点的属性,右击断点:
可以尝试对断点属性进⾏个性化更改,然后观察图标的变化。2.代码调试
我们有⼏种⽅法来debug程序第⼀种:通过⿏标右击代码处,可以来debug程序
第⼆种:可以通过点击这个⼩⾍⼦的图标来进⾏debug
接下来会Pycharm会执⾏以下操作:
(1)PyCharm开始运⾏,并在断点处暂停
(2)断点所在代码⾏变蓝,意味着Pycharm程序进程已经到达断点处,但尚未执⾏断点所标记的代码。
(3)Debug tool window窗⼝出现,显⽰当前重要调试信息,并允许⽤户对调试进程进⾏更改。在这⾥介绍⼀下debug窗⼝⼏个图标分别代表的意思
这⾥⼀排七个坐标的意思分别是1.show execution point (F10) 显⽰当前所有断点
2.step over(F8) 单步调试。
若函数A内存在⼦函数a时,不会进⼊⼦函数a内执⾏单步调试,⽽是把⼦函数a当作⼀个整体,⼀步执⾏3.step into(F7) 单步调试。
若函数A内存在⼦函数a时,会进⼊⼦函数a内执⾏单步调试。4.step into my code(Alt + Shift +F7) 执⾏下⼀⾏但忽略libraries(导⼊库的语句)
5.force step into(Alt + Shift +F7) 执⾏下⼀⾏忽略lib和构造对象等
6.step out(Shift+F8)当⽬前执⾏在⼦函数a中时,选择该调试操作可以直接跳出⼦函数a,⽽不⽤继续执⾏⼦函数a中的剩余代码。并返回
上⼀层函数。7.run to cursor(Alt +F9) 直接跳到下⼀个断点
Lua调试⼯具使⽤及原理
前⾔
当我们在linux下使⽤c/c++开发时,可以通过gdb来调试我们编译后的elf⽂件。gdb⽀持了attch、单步运⾏(单⾏、单指令)、设置断点等⾮常实
⽤的功能来辅助我们调试。当使⽤lua开发的时候,⼀般可能会使⽤print(打印到屏幕)或是输出⽇志等稍微简陋的调试⽅式,但如果⽇志输出不
能满⾜我们需求时,⽐如我们需要类似断点、单步执⾏等更⾼级的调试功能,此时就必须借助第三⽅⼯具。
本⽂介绍了lua调试⼯具LuaPanda的使⽤,以及lua调试⼯具和gdb在实现上的⼀些区别。
gdb调试原理
先简单介绍⼀下gdb的原理。⼀般的我们将gdb这种调试进程称为tracer,被调试进程称为tracee。当进程被调试时(处于traced状态)时,每次收
到任何除了SIGKILL以外的任何信号,都会暂停当前的执⾏,并且tracer进程可以通过waitpid来获取tracee的暂停原因。gdb使⽤ptrace系统调⽤来
实现操作tracee进程
1. gdb附加到进程
当使⽤gdb附加到⼀个正在运⾏的进程(tracee)上时,gdb会执⾏类似下⾯的代码:
ptrace(PTRACE_ATTACH, pid, ...)
这⾥的pid是tracee的pid。系统调⽤执⾏后,os会给tracee进程发送⼀个SIGTRAP信号,然后tracee的执⾏将会暂停。最后gdb(tracer)可以通过
系统调⽤waitpid来获取tracee的暂停原因,并且开始调试。
2. gdb单步执⾏
单步调试与上述attch类似,gdb通过下⾯的代码告诉tracee进程需要在运⾏完⼀个指令后暂停:
ptrace(PTRACE_SINGLESTEP, pid, ...)
当tracee执⾏完⼀个指令后,tracee也会因为收到os的SIGTRAP信号从⽽暂停执⾏。
3. gdb设置断点
设置断点稍微有点不同,⾸先gdb需要从调试程序的调试信息中根据⾏号(函数名)找到代码的内存地址,然后通过ptrace将tracee进程的代码替
实验一 debug调试环境实验 分数:
1. 使用例子说明debug的t、p、g命令的区别;
如果用T命令,先会单步执行前两条指令,但在执行第三条的int的时候会跳转到21h号中断的入口,也就是说T是按照CPU的真实运行过程来的
如果用P命令,前三条一样,但在执行第三条的时候不会跳转到中断程序的入口,而是一步就把int 21H这条指令"执行"完了,然后直接就接着下一条指令执行 如果用G命令直接中断,并且显示寄存器标志和下一条要执行的命令。
T是执行一个指令,通常采用跟踪一条指令,但用户也可以用指令条数设定一次跟踪多条指令,每执行一条指令之后,显示所有寄存器的内容和标志状态以及下一条指令在内存中的保存情况。
P其实也是执行一条指令,但区别是在执行INT的时候会把这个INT整个的执行完毕,而不是跳转到这个中断程序去跟踪执行使用P命令执行程序,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。若被执行的指令不是循环、重复的字符串指令、软件中断或子程序,则P 命令与T(跟踪)命令的作用相同。
实验一 Turbo Debugger的使用
[实验目的]
了解Turbo Debugger的功能;
掌握在Turbo Debugger的CPU视图中的基本操作方法;
进一步加深对寄存器和存储器的认识。
[实验要求]
运行Turbo Debugger,了解其常用菜单命令和键盘命令,列出对9条命令的功能解释;
输入给出的8条指令,逐条依次执行,观察记录执行结果。
修改各寄存器的值,叙述键盘操作方法;
修改标志位;
[实验内容]
1、TD命令功能说明:
菜单-命令 键盘热键或快捷键 功能
File-Open
File-Dos shell
File-Quit Alt-X
Run-Run F9
Run-Trace into F7
Run-Step over F8
Run-Program reset Crtl-F2
Data-Add wathce Crtl-F7
Windows-User screen Alt-F5
2、指令运行调试记录
指令 寄存器变化 内存变化 标志位变化
mov ax,4321h ax=
mov bx,0100h bx=
mov [bx],62A0h ds:[0100]=
add ax,[bx] ax= bx= sf= zf= cf= of=
add bx,2 bx= sf= zf= cf= of=
mov [bx],ax ds:[0102]=
mov al,09h ah= al=
or al,30h ah= al=
3、通过键盘操作,修改寄存器内容的操作方法为:
4、通过键盘操作,修改标志位的操作方法为:
5、将Windows中DOSBox窗口最大化的方法:Alt-Enter
6、在Windows中切换各应用程序界面的方法:Alt-tab
[实验小结]