[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 ...
随机推荐
- Swoole:PHP7安装Swoole的步骤
下载 swoole 首先下载swoole的源码包,这个操作很简单,没有太多说的.(没有wget:brew install wget--mac) wget -c https://github.com/s ...
- pdf缩略图生成上传解决方案
前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践. ...
- pdf缩略图上传控件
一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...
- nodeJS环境搭建
1. Node.js是什么 1.1 Node.js是一个基于Chrome V8引擎的[JavaScript运行环境]. Node.js使用了一个事件驱动.非阻塞式I/O 的模型. 1.2 Node.j ...
- 日照学习提高班day4测试
A 思路: 一看到这个题,他不仅要求输出字典序最小的串,还要满足两两不重复,所以我们可以先输出ababab...什么的,最后缀上要求的k-2种字母 坑点: 当然这样想是不完全的!该题是拥有许多特殊情况 ...
- Spring Boot教程(四十)使用Flyway来管理数据库版本
在上面的使用JdbcTemplate一文中,主要通过spring提供的JdbcTemplate实现对用户表的增删改查操作.在实现这个例子的时候,我们事先在MySQL中创建了用户表.创建表的过程我们在实 ...
- 「CTSC 2008」祭祀
题目链接 戳我 \(Solution\) 第一问 这道题要知道一个叫做\(Dilworth\)的定理 最长反链\(=\)最小链覆盖 证明(\(from\ r\_64\)): 所以我们只要求一个最小链覆 ...
- IntelliJ IDEA工具增加test测试方法,报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
是因为我在IntelliJ IDEA中,通过plugins增加 插件的时候,在 增加的测试类是junit4.12,改版本的jar包不再包含hamcrest-library.jar .我是通过将自己的项 ...
- 图片上传(前端显示预览,后端php接收)
html: <form action="{:Url('do_ls_law_upload')}" method="POST" accept-charset= ...
- Python——语言基础
1.数据类型 1.1.字符串 1.1.1.变量声明 1.1.2.相关函数 1.2.布尔类型 1.2.1.变量声明 1.2.2.相关函数 1.3.数字类型 1.3.1.变量声明 1.3.2.相关函数 1 ...