[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 ...
随机推荐
- js中window.event对象
event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等. event对象只在事件发生的过程中才有效. event的某些属性只对特定的事件有意义.比如,fromEleme ...
- 十进制数转N进制c++实现
编写一个算法,将一个非负的十进制整数N转换为另一个基数为B的B进制整数. #include <iostream> #include<string.h> using namesp ...
- 数位dp入门 HDU 2089 HDU 3555
最基本的一类数位dp题,题目大意一般是在a~b的范围,满足某些要求的数字有多少个,而这些要求一般都是要包含或者不包含某些数字,或者一些带着数字性质的要求,一般来说暴力是可以解决这一类问题,可是当范围非 ...
- 最大数maxnumber (HYSBZ 1012)(线段树区间查询和单点修改)(优雅的暴力)
Problem 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L 个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插入操作 ...
- JQuery动画之淡入淡出动画
1. 淡入动画 1.1 不带参数的淡入动画 格式: $(selector).fadeIn(); 示例代码: <!doctype html> <html lang="en&q ...
- Android中定义广播监听,其他页面发送
private LocalBroadcastManager broadcastManager; /** * 注册广播接收器 */ private void receiveAdDownload() { ...
- ftp协议在linux上的配置
第一步:安装 yum install -y vsftpd 第二步:启动ftp服务:vsftpd [root@localhost ~]# systemctl start vsftpd 第三步:查看启动状 ...
- 获取客户端ip(包含中间反向代理)
/** * 根据request获取用户的IP地址 * @param request * @return */ public static String getRemoteHost(HttpServle ...
- ccf 201612-4 压缩编码(DP)(100)
ccf 201612-4 压缩编码 问题分析: 解决本问题,首先需要知道哈夫曼编码.参见:哈夫曼编码_百度百科. 这是一个编码问题,似乎可以用哈夫曼编码来解决,但是略有不同的地方在于“每个字符的编码按 ...
- rocketmq的以集群模式MessageModel.CLUSTERING实现消费者集群消费消息,实现负载均衡
package com.bfxy.rocketmq.model; import java.util.List; import org.apache.rocketmq.client.consumer.D ...