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的許可權