python的debug方法

经过摸索在两大层面都可以进行debug调试。
一,命令行
debug是编码是非常重要的调试技巧,通过在运行过程中设置断点,帮助开发人员更好的理解运行过程。
Python中debug不像JAVA或者C++那样在IDE中设置断点那么直观。
Python的debug有两种方式: 1.在命令行中运行, 2.在脚本当中运行。两种方式都需要使用pdb模块。
方式一:在命令行中运行
$ python -m pdb my_script.py
方式二:脚本中运行

在需要设置断点的地方,插入方法 pdb.set_trace()

import pdb

def make_bread():
pdb.set_trace()
return “I don’t have time”

print(make_bread())
命令: 在进入调试状态之后,就可以输入命令进行调试了。
c: (continue)继续执行
w:(words)显示当前行的上下文信息
a:(arguments)打印当前函数的参数列表
s:(stop)执行当前行,并在顶一个可能的时机停止
n:(next)继续执行直到当前函数的下一行或者函数返回值

二,IDE中
本人使用IDLE(即python安装时带的)。
打开shell,代码窗口,和debugger。三大窗口。
第一步,在代码中可以加断点。
第二步,
在shell命令行中可以准备些环境引用,包括,
import sys
sys.path.append(“”)
当然,可以再import你写的包,或者第三方的包。
第三步,可以通过包引用来选择测试你要的任意函数。在单步调试时,可以看到所有的变量,一目了然。

对于IDE中调试,改了代码后,要重启shell,并再次引用。这一点来看不如命令行调试。

vim-ide技巧

乱码问题办法:以本人gvim为环境

set enc=cp936
set termencoding=chinese
language message cp936

export LANG=zh_CN.GBK
export LC_ALL=zh_CN.GBK

:help encoding-values

Image

“ctrl+]”—–光标会自动跳转到定义处
“ctrl+T”—–光标会从定义跳转回来
Tlist——–TagList窗口即出现在左侧
wm———–打开左侧两栏(文件和声明)
ctrl+Tab—–切换到前一个buffer,并在当前窗口打开文件;
ctrl+shift+Tab—切换到后一个buffer,并在当前窗口打开文件;
ctrl+箭头键—–可以切换到上下左右窗口中;
ctrl+h,j,k,l—-切换到上下左右的窗口中。

F12或:A或:AS,AV,AT或点击头文件后,gf
——–源码文件后,按F12即可以在c/h文件中切换,也可以通过输入:A实现.当使用了gf时,用ctrl+O来回退栈。
F3——将光标定位到要查找的内容上,按下F3,确定要查找的内容和搜索范围
F2——光标定位在需要添加书签的地方,按下ctrl+F2,即添加了书签.使用F2在书签之间正向切换,shift+F2反向切换。
Vimgrep Make ./*.c或在目录层vimgrep “content” **/*.cpp——–配合命令Cl,cn,cp,cw,copen,cclose
建立tags——cmd到源码目录,然后执行(本人环境下)“c:\Program Files\vim\vim73\ctags” -R *

sp,vs,vsp让人很爽的分屏

vi 查找忽略大小写
第一种方法:
/abc\c
第二种方法:
set ignorecase (或者简写 set ic)

linux下安装vim,在源光盘的包目录中依次装吧(前缀是vim-)
X11,common,enhanced,minimal

常用操作总结:
定律:

动作后,都进入插入模式
某些动作是返回了位置,前面可再加动作
动作,位置前都可以配合数值

动作:
i—插入–insert                         插入30x–30ix+esc键
I–当前行开始处插入
a–追加–append
x–删除当前,以字符为单位
X–删除之前
d–删除–delete
y–拷贝–copy
p–粘贴–paste
o–下方插行–open
O–上方插行open
u–撤消–undo
U–行撤消–undo
Ctrl+r–重做
c–更改–change
r–替换–replace
R–一直替换–replace,退格键是撤消替换
g–前往(gg文件首,G文件尾,数值G到行首)–go
f–查找–find
F–反向查找(向左)–find
t–到达和F区别于定位位置–to

位置:
w–移向下一个单词词首–word
W–同上,移动间隔不是单词而是字串
b–移向上一个单词词首–begin
B–同上,移动间隔包括了标点和符号
e–移向下一个单词词尾–end
E–同上,移动间隔包括了标点和符号
G–文件尾
^–行首非空字符
0–行首第一字符(同于home键,同于_键)
$–行尾,2$即下一行行尾,注意这是一个包括命令,即包括最后一个字符
hjkl–
H–屏幕范围内的左上角行,zt–headhome
M-屏幕范围内的中间行,zz–middle,大写可就是存盘退出了
L-屏幕范围内的左上角行,zb–last
%–对称符号的匹配定位
月光宝盒:
”–两位置,闪回
配合mark的扩展应用
[]最后修改的位置
Ctrl+o–跳回到更老的地方–older
——-i–跳回到更新的地方相当于tab

列块选择:

Ctrl+v,可视模式开启,在gvim中是使用ctrl+q

               v配合位置,即可选中欲操作的块,用一下o–other end来试试吧
     o    other end
     O    另一个对角
     ~    交换大小写
     U    转换为大写
     u    转换为小写
     r    以某个字符填充
     >    平移
     <    平移
     :set shiftwidth=4    "平移距离
     J    删除选中行的所有换行符
     gv    重复上次的可视选择------------这东东很好用
重复:

;–正向(用于ft,行内查找时)
,–反向(用于ft,行内查找时)
.–重复
屏幕操作:

ctrl+G–查看当前操作的文件和行数

Set ruler

Set number

Ctrl+u–向上滚半屏–up
Ctrl+d–向下滚半屏–down
——-e–向上多显一行one line Extra
——-y–向下多显一行

功能就是把当前行放到屏幕的上中下三个位置:(注此时光标不动所在屏幕动)
z+回车
z+.
z+-
前面都可以加行号码,注意不是行数.

当你想把光标放到屏幕的上下三个位置时(注此时屏幕内容不动,光标位置变化)
H
L

简单查询:
/+所查串正向
+所查串反向
备注:
字符 .*[]^%/?~$ 有特殊含义。如果你要查找它们,需要在前面加上一个
“”。
配合使用:

n,N

/<the>只查找the的句法

%s/old/new/g

简单修改:

x  表示  dl  (删除当前光标下的字符)
X  表示  dh  (删除光标左边的字符)
D  表示  d$  (删除到行尾)
C  表示  c$  (修改到行尾)
s  表示  cl  (修改一个字符)
S  表示  cc  (修改一整行)
.–重复最后一次的修改操作
组合拳:

     操作区域对
     <action>a<object> 和 <action>i<object>
   a是包含,i是inside
  • action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
  • object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。

aw–a word

Is–inner sentence

as–a sentence

q!

e!

w!

Wq==ZZ
~ 大小写
ma 设书签
`a 定位书签
Ey,fb,ud
Set ic 区分大小写
Set autoindent
Set shiftwidth=4 设置缩进
vi一般用法
一般模式                             编辑模式                                     指令模式
h   左                               a,i,r,o,A,I,R,O                           :w   保存
j   下                                 进入编辑模式                                 :w!   强制保存
k   上                                 dd   删除光标当前行                       :q!   不保存离开
l   右                                 ndd   删除n行                                   :wq!   保存后离开
0   移动到行首                 yy   复制当前行                                 :e!   还原原始档
$   移动到行尾                 nyy   复制n行                                     :w   filename   另存为
H   屏幕最上                     p,P   粘贴                                           :set   nu   设置行号
M   屏幕中央                     u     撤消                                             :set   nonu   取消行号
L   屏幕最下                     [Ctrl]+r   重做上一个动作               ZZ   保存离开
G   档案最后一行             [ctrl]+z   暂停退出                         :set   nohlsearch       永久地关闭高亮显示
/work   向下搜索                                                         :sp   同时打开两个文档
?work   向上搜索                                                        [Ctrl]+w   两个文档设换
gg   移动到档案第一行                                        :nohlsearch         暂时关闭高亮显示
Vi同时编辑多文件
Vi -o file1.c file2.c

:e#1

:e#2

如果已经分屏
ctrl+W来切换(配合箭头方向键)

在linux里面遇到多行注释的时候,一个个去点,手有点累。
执行如下命令:
:.,+499 s/^/#/g
.    代表当前光标所在行
+499 和往后的499行
s/^/#/g 在行首加上#
:10,499 s/^/#/g
10   第十行开始
499 到第499行
其他都是一样的
本人根据以上摸索出多行注释的快捷技巧:
同理

:8,11 s/^////g

因为//是需要转义的,所以把//换成上面的#不就行了。同理要想在行首加入任何字符都是OK了。
正则表达式来查找或高亮:/#注释此为查找#(<w+>)_s*1
后台运算:ctrl+R = 2+2*3 enter
执行后看到结果了吧。
缩写替换:ab [缩写] [要替换的文字]
例子:ab asap as soon as possible
当忘记用root方式打开文件时的保存:
:w !sudo tee %
这会以root方式保存
自动补全:ctrl+n
ggVGg?说是能把全文加密,可是在gvim中没效果。
命令行下比较文件不同:
方法一:vimdiff [文件1] [文件2]
方法二:先用VSP,然后在第一窗口,diffthis,记得用diffoff来退出比较。
按时间回退文件:earlier 1m,文件回退到1分钟以前的状态,:later相反的操作
删除标记内文字:di[标记],这个应该是新瓶装老酒,我相信;di[标记]就是带标记删除了。
把VIM变成16进制编辑器:%!xxd成对的退出命令是:%!xxd -r
把内容变成html来高亮显示:%TOhtml或是%Tohtml(gvim是前者有效)

下面两个转来的参考图

Image

Image

Image