[Python3] 039 语法调试
语法调试
1. 调试技术
- 调试流程
- 单元测试 → 集成测试 → 交测试部
- 分类:
- 静态调试
- 动态调试
2. pdb 调试
- 官方文档,可选版本
- pdb: Python 调试库
- 常用命令
命令 | 解释 |
---|---|
break 或 b | 设置断点 |
continue 或 c | 继续执行程序 |
list 或 l | 查看当前行的代码段 |
step 或 s | 进入函数 |
return 或 r | 执行代码直到从当前函数返回 |
exit 或 q | 中止并退出 |
next 或 n | 执行下一行 |
pp | 打印变量的值 |
help | 帮助 |
- 简单举一例
import pdb
str1 = "aaa"
pdb.set_trace()
str2 = "bbb"
str3 = "ccc"
final = str1 + str2 + str3
print(final)
- 执行过程
> d:\pdb_test.py(6)<module>()
-> str2 = "bbb"
(Pdb) n
> d:\pdb_test.py(7)<module>()
-> str3 = "ccc"
(Pdb) n
> d:\pdb_test.py(8)<module>()
-> final = str1 + str2 + str3
(Pdb) n
> d:\pdb_test.py(8)<module>()
-> print(final)
(Pdb) n
aaabbbccc
--Return--
> d:\pdb_test.py(9)<module>()->None
-> print(final)
(Pdb)
插一个 gdb
- 将 C 反汇编
#include <stdio.h>
int main() {
int a = 1, b = 2;
printf("a + b = %d\n");
return 0;
}
- 将 test.c 编译为 test.exe 执行下方操作
PS D:\code> gdb test
GNU gdb (GDB) 8.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-w64-mingw32".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...done.
(gdb) disas main
Dump of assembler code for function main:
0x0000000000401550 <+0>: push %rbp
0x0000000000401551 <+1>: mov %rsp,%rbp
0x0000000000401554 <+4>: sub $0x30,%rsp
0x0000000000401558 <+8>: callq 0x401640 <__main>
0x000000000040155d <+13>: movl $0x1,-0x4(%rbp)
0x0000000000401564 <+20>: movl $0x2,-0x8(%rbp)
0x000000000040156b <+27>: lea 0x2a8e(%rip),%rcx # 0x404000
0x0000000000401572 <+34>: callq 0x402a70 <printf>
0x0000000000401577 <+39>: mov $0x0,%eax
0x000000000040157c <+44>: add $0x30,%rsp
0x0000000000401580 <+48>: pop %rbp
0x0000000000401581 <+49>: retq
0x0000000000401582 <+50>: nop
0x0000000000401583 <+51>: nop
0x0000000000401584 <+52>: nop
0x0000000000401585 <+53>: nop
0x0000000000401586 <+54>: nop
0x0000000000401587 <+55>: nop
0x0000000000401588 <+56>: nop
0x0000000000401589 <+57>: nop
0x000000000040158a <+58>: nop
0x000000000040158b <+59>: nop
0x000000000040158c <+60>: nop
0x000000000040158d <+61>: nop
0x000000000040158e <+62>: nop
0x000000000040158f <+63>: nop
End of assembler dump.
(gdb) q
3.Pycharm 调试
- 软件有 run/debug 两种模式
- 断点
- 在行号附近左键单击即可设置
- 程序在 debug 模式下,执行到断点所在行就会暂停
- 单步
- 程序停在断点处后,常用“单步”一步一步调试
- 除了单步(step over),还有 step into、step into my code 等
4. 单元测试
[Python3] 039 语法调试的更多相关文章
- python002 Python3 基础语法
python002 Python3 基础语法 编码默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -* ...
- 正则表达式 解决python2升python3的语法问题
2019.9.12 更新 今天偶然看到 python 官网中,还介绍了一个专门的工具,用于 python2 升级 python3,以后有机会使用下看看 https://docs.python. ...
- Python3基础语法和数据类型
Python3基础语法 编码 默认情况下,Python3源文件以UTF-8编码,所有字符串都是unicode字符串.当然你也可以为原码文件制定不同的编码: # -*- coding: 编码 -*- 标 ...
- 11 . Python3之异常,调试和测试
12.Python3入门之异常.调试和测试 在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修 ...
- Python3基础语法你学会了么
编码 默认:源码文件以UTF-8编码,字符串都是unicode字符串 指定: 标识符 第一个字符:字母表中的字符或下划线 _ 其它部分:由字母.数字.下划线 _ 组成 大小写敏感 python ...
- 关于python3.x语法
注1:该文章中所有的图示均使用的pycharm 注2:#号后面没有声明的均为运算结果 #用井字符开头的是单行注释 """ 多行字符串用三个引号 包裹,也常被用来做多 行注 ...
- 【Python】Python3基本语法入门学习
0.Python概述 1.First Word Game 2.变量与字符串 3.improved game 4.Python数据类型 5.常用操作符 6.分支与循环 7.列表 8.元组 9.字符串内置 ...
- python3基础语法(标识符,注释,数据类型,获取用户输出,代码块,python保留字)
编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*- ...
- python3:语法变动 及新特性
python3.0 对python2.x 升级后重大语法变动,幸好留下2.7.6及后续2版本,保持一些语法兼容. 原始地址:http://hi.baidu.com/jxq61/item/3a24883 ...
随机推荐
- ASCII和UTF-8
造冰箱的熊猫@cnblogs 2018/12/11 用了这么久的UTF-8,第一次了解了点UTF-8的细节 UTF-8[1]属于变长度编码.一个UTF-8字符的编码长度为1~4个字节. 1)长度为1个 ...
- python 中type和object的关系
转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...
- hdu 5791 Two 二维dp
Two Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- 在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib 及一些问题
一.准备工作: 1.下载OpenCV安装包:https://github.com/opencv/opencv 安装过程实际上就是解压过程,安装完成后得到(这里修改了文件名): 2.下载opencv_c ...
- jsPDF – 基于 HTML5 的强大 PDF 生成工具
jsPDF 是一个基于 HTML5 的客户端解决方案,用于生成各种用途的 PDF 文档. 使用方法很简单,只要引入 jsPDF 库,然后调用内置的方法就可以了. 米扑科技项目用到了HHTML5生成PD ...
- JavaWeb_(Hibernate框架)Hibernate与c3p0与Dbutils的区别
JavaWeb_(Hibernate框架)使用Hibernate开发用户注册功能 传送门 JavaWeb_(Hibernate框架)使用c3p0与Dbutils开发用户注册功能 传送门 Hiberna ...
- NullPointerException 没有堆栈
周五在公司搭好的ELK上查看日志,组长让看看其中NullPointerException出现很多的原因. 通过NullPointerException搜索,点看其中一个查看,发现异常的信息就一行jav ...
- 微服务一键启动脚本shell没有环境变量的
#!/bin/bash#######################################################export JAVA_HOME=/root/data/app/jd ...
- vue调试工具vue-devtools安装
vue-devtools是一款基于chrome浏览器的插件,用于vue应用的调试,这款vue调试神器可以极大地提高我们的调试效率.帮助我们快速的调试开发vue应用. 这里介绍一下vue-devtool ...
- 算法试题 - 找出最小 k 个数
题目 题目:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解析 思路1 这一题应用堆排序算法复杂度只有O(nlog k), ...