Linux下使用pdb简单调试python程序
python自带调试工具库:pdb
# -*- coding:utf-8 -*-
def func(num):
s = num * 10
return s
if __name__ == '__main__':
print 'debug starting...'
print '*' * 10
print 'debug ending…'
num = 100
s = func(num)
print s
在python文件中不引用pdb库,可以在执行python文件的时候,加上参数:
python -m pdb demo.py
来到pdb调试交互界面,debug模式将会停止在的第一行程序代码行
可以执行如下命令,进行相应的操作:
b(or break):设置断点;设置函数:b demo.func;设置行数:b demo:14(行数)
n(or next):执行下一行:
Step over,跳过
c(or continue):执行下一个断点,没有断点则到程序结束:Step filter
s(or step):进入函数,
Step into,单步跳入
r(or return):跳出函数,Step return
l(or list):查看当前代码段
q(or quit):退出当前debug
p(or print):打印变量值
h(or help):查看帮助
cl(clear):清除所有节点
disable [bpnumber[bpnumber]]:将第num个断点失效,enable,失效第10个断点
enable [bpnumber[bpnumber]]:启用第num个断点,enable 10,启用第10个断点
w(where):打印堆栈信息
a(args):打印当前函数参数信息
当然我们也可以使用pdb库的函数,来实现对py的debug:
比如:我们可以使用pdb函数:set_trace()
def func(num):
s = num * 10
return s
if __name__ == '__main__':
print 'debug starting...'
print '*' * 10
pdb.set_trace()
print 'debug ending…'
num = 100
s = func(num)
print s
执行程序:python pdb_demo.py
此时意味着给程序设置断点行,将会自动运行至print ‘py ending...’停住,让开发者继续触发接下来的操作,该操作在一个py引用其他py的时候,设置断点恰到好处。
B. linux 下用gdb进行调试.c程序,执行run命令时提示权限不够,怎么办
.c是源文件,不是程序,没有可执行权限,所以不能用来调试。
应该先用gcc来编译,编译之后的程序就具有可执行权限的。
如果我们想用来调试,比如1.c,可以这样
gcc 1.c -o 1.out -g
然后
gdb 1.c
gdb的用法自己再去找详细资料吧,一般会用l(list,列出源代码),b(break,设置断点),r(run,运行文件)就可以了。
C. linux gdb基础命令
你的gdb压根就没有解析出来断点,你的库有问题。你run后bt一下就可以进入断点的
你把代码发我吧,给你调试
D. Linux下gdb调试的几个简单命令
和在IDE上差不多,无非是单步 继续 断点之类的
list列出代码
run运行
step单步
break断点
watch查看变量
。。。。
E. linux入门基础(四)Gdb调试程序
Gdb调试
注意:在Gcc编译选项中一定要加入
–g
退出GDB:quit
或
Ctrl+d
调试过程:
1.
查看文件
命令:
(gdb)
l
命令:(gdb)
b
行号
注:到第17行停止,并没有执行17行
3.
查看断点情况
info
b
4.
运行代码
r
命令:
(gdb)
r
(也可以指定行开始运行,在r后面加上行号)
5.
查看变量值
p
命令:(gdb)
p
变量名
6.
设置监视点:
watch
z
(变量名)
也可以是复杂的表达式
7.
单步运行
命令:(gdb)
n
(逐过程)
8.逐步,会进入函数
命令:(gdb)
s
9.条件断点
将正常断点转变为条件断点:condition
如:condition
1
i
==
10
只有当满足条件i
==
1时,才会在断点1处暂停
10.
恢复程序运行
c
命令:
(gdb)
c
(程序就会运行,如果没有断点,就运行剩下部分,如果有断点,就会运行到下一个断点)
11.
去除断点
clear
line_number
clear
filename:line_number
12.
help
12.1
help找出类别
12.2help从列表中
F. linux下gdb怎么不执行.gdbinit
运用以下2个命令即可:next //执行下一行源代码,但并不进入调用函数内部
step //执行下一行源代码,进入函数内部,这个时候,可以在调用函数里面加断点。
gdb中的函数调用:
call name 调用和执行一个函数(gdb) call gen_and_sork(1234,1,0)(gdb) call printf(“abcd”)=4finish 结束执行当前函数,显示其返回值(如果有的话)
G. linux下的gdb是个命令,但在linux常用命令列表中找不到
首先,一般的命令其实也都是程序
装在系统路径下的程序的程序名,都可以作为命令直接调用
具体哪些路径是“系统路径”,Linux下可以用$PATH$命令来查看(通常会有多个路径,用冒号隔开)
而gdb其实是gcc/g++编译器的一个附带的调试器
虽然现在主流的Linux发行版中都会自带gcc编译器,当然也会附带这个gdb的调试器
但毕竟它不算是Linux系统的内部组件,所以自然也不能算做Linux的自带命令了
H. linux用gdb调试遇到函数调用怎么办
运用以下2个命令即可:
next
//执行下一行源代码,但并不进入调用函数内部
step
//执行下一行源代码,进入函数内部,这个时候,可以在调用函数里面加断点。
gdb中的函数调用:
call
name
调用和执行一个函数(gdb)
call
gen_and_sork(1234,1,0)(gdb)
call
printf(“abcd”)=4finish
结束执行当前函数,显示其返回值(如果有的话)
I. linux中 怎么使用gdb调试程序
gdb是用来调试二进制程序的,不能调试python脚本。 python自带pdb模块,可以用来调试自己的脚本。 使用python -m pdb ,交互方式,命令与gdb类似。
J. linux 下用gdb进行调试.c程序,执行run命令时提示权限不够,怎么办求解决方法
首先确定 abc是可执行文件, 然后确定当前执行gdb的用户有执行abc的权限