[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 ...
随机推荐
- 计算机HDMI端口与电视机相连
造冰箱的大熊猫@cnblogs 2019/2/27 打算通过HDMI接口将计算机桌面投影到电视机上,结果遇到问题,折腾了好一阵才搞定.现将这些问题记录下来 1.设备环境 计算机:使用Ubuntu 1 ...
- 手机存储器在Ubuntu中的挂载位置
造冰箱的大熊猫,本文适用于Ubuntu 16.04和安卓手机@cnblogs 2018/12/6 通过USB数据线将安卓手机与Ubuntu相连,并在手机上设置“USB连接方式”为“传输文件”后,Ubu ...
- hihocoder 1251 Today is a rainy day ( 15年北京 C、暴力 )
题目链接 题意 : 一串数字变成另一串数字,可以单个数字转变,或者一类数字转变,问最少操作次数 分析 : 15年北京赛区的银牌题 首先有一个点需要想明白.或者猜得到 即最优的做法肯定是先做完 2 操作 ...
- 「HNOI2014」世界树
题目链接 问题分析 首先观察数据范围可以知道要用虚树.但是要考虑怎么维护原树的距离信息. 如果只有两个关键点,我们可以很方便地找到中点将整棵树划分为两部分.而如果有多个关键点,看起来有效的方法就是多源 ...
- cmake 工具使用
cmake_minimum_required(VERSION 3.5)#cmake版本 project( DisplayImage )#项目名称 find_package( OpenCV REQUIR ...
- C++入门经典-例8.3-子类显示调用父类构造函数
1:当父类含有带参数的构造函数时,创建子类的时候会调用它吗?答案是通过显示方式才可以调用. 无论创建子类对象时调用的是那种子类构造函数,都会自动调用父类默认构造函数.若想使用父类带参数的构造函数,则需 ...
- 一、基础篇--1.2Java集合-HashMap源码解析
https://www.cnblogs.com/chengxiao/p/6059914.html 散列表 哈希表是根据关键码值而直接进行访问的数据结构.也就是说,它能通过把关键码值映射到表中的一个位 ...
- cygwin执行.py提示找不到模块,但已经安装模块的解决办法
. 在解决了cygwin中make命令不能使用的问题之后(https://www.cnblogs.com/zhenggege/p/10724122.html),make maskrcnn路径下的set ...
- Linux 安全工具之extundelete误删除恢复
一:前言 在Linux中,我们通常会因为误删除文件而感到烦恼,rm -rf +文件 rf参数简直就是每个运维的噩梦,但是大家想过没,为什么删除文件那么快呢,为什么我们copy文件的时候那么慢. 其实 ...
- CSS display的几个常用的属性值,inline , block, inline-block
1.解释一下display的几个常用的属性值,inline , block, inline-block inline(行内元素): 使元素变成行内元素,拥有行内元素的特性,即可以与其他行内元素共享一行 ...