如何使用linux下gdb来调试python程序

\u5982\u4f55\u4f7f\u7528linux\u4e0bgdb\u6765\u8c03\u8bd5python\u7a0b\u5e8f

(1)\u5047\u8bbe\u8981debug\u7684\u8fdb\u7a0b\u53f7\u4e3a1000,\u8fd0\u884c\u5982\u4e0b\u547d\u4ee4:
$ gdb -p 1000
\u4f7f\u7528\u6b64\u547d\u4ee4\u5373\u53ef\u4f7fgdb\u9644\u52a0\u5230\u8fdb\u7a0b\u3002
(2)\u8f7d\u5165libpython\u811a\u672c
\u5982\u679c\u4f60\u7684gdb\u662fredhat\u6216fedora\u7b49\u5382\u5546\u4fee\u6539\u8fc7\u7684\uff0c\u4f1a\u6709--python\u9009\u9879\uff0c\u4f7f\u7528\u6b64\u9009\u9879\u5373\u53ef\u6307\u5b9agdb\u542f\u52a8\u65f6\u8f7d\u5165\u7684Python\u6269\u5c55\u811a\u672c\uff08\u6b64\u811a\u672c\u662f\u6269\u5c55gdb\u7684\uff0c\u4e0d\u662f\u6211\u4eec\u9700\u8981debug\u7684\u811a\u672c\uff09\u3002
$ gdb --python /path/to/libpython .py -p 1000
\u5982\u679c\u5b89\u88c5\u7684\u662fGNU\u7684gdb\uff0c\u5c31\u9700\u8981\u6253\u5f00gdb\u540e\u624b\u52a8\u8f7d\u5165libpython.py\u811a\u672c
(gdb) python
> import sys
>sys.path.insert(0, '/path/to/libpython.py' )
> import libpython
>end
(gdb)
\u8fd9\u65f6\u5c31\u53ef\u4ee5\u4f7f\u7528py-bt\u547d\u4ee4\u6253\u5370\u5f53\u524d\u7ebf\u7a0b\u7684Python traceback\u4e86\u3002libpython\u8fd8\u63d0\u4f9b\u5f88\u591a\u547d\u4ee4\uff0c\u4f8b\u5982py-print\u6253\u5370\u53d8\u91cf\uff0cpy-locals\u6253\u5370\u6240\u6709\u672c\u5730\u53d8\u91cf\u7b49\u7b49\uff0c\u8be6\u7ec6\u53ef\u6253\u5f00libpython.py\u67e5\u770b\u3002

Linux\u4e0b\u4f7f\u7528pdb\u7b80\u5355\u8c03\u8bd5python\u7a0b\u5e8f

python\u81ea\u5e26\u8c03\u8bd5\u5de5\u5177\u5e93\uff1apdb

# -*- coding:utf-8 -*-

def func(num):
s = num * 10

return s

if __name__ == '__main__':
print 'debug starting...'
print '*' * 10
print 'debug ending\u2026'
num = 100
s = func(num)
print s
\u5728python\u6587\u4ef6\u4e2d\u4e0d\u5f15\u7528pdb\u5e93\uff0c\u53ef\u4ee5\u5728\u6267\u884cpython\u6587\u4ef6\u7684\u65f6\u5019\uff0c\u52a0\u4e0a\u53c2\u6570\uff1a

python -m pdb demo.py

\u6765\u5230pdb\u8c03\u8bd5\u4ea4\u4e92\u754c\u9762\uff0cdebug\u6a21\u5f0f\u5c06\u4f1a\u505c\u6b62\u5728\u7684\u7b2c\u4e00\u884c\u7a0b\u5e8f\u4ee3\u7801\u884c



\u53ef\u4ee5\u6267\u884c\u5982\u4e0b\u547d\u4ee4\uff0c\u8fdb\u884c\u76f8\u5e94\u7684\u64cd\u4f5c\uff1a

b\uff08or break\uff09\uff1a\u8bbe\u7f6e\u65ad\u70b9\uff1b\u8bbe\u7f6e\u51fd\u6570\uff1ab demo.func\uff1b\u8bbe\u7f6e\u884c\u6570\uff1ab demo:14(\u884c\u6570)

n\uff08or next\uff09\uff1a\u6267\u884c\u4e0b\u4e00\u884c\uff1a
Step over\uff0c\u8df3\u8fc7

c\uff08or continue\uff09\uff1a\u6267\u884c\u4e0b\u4e00\u4e2a\u65ad\u70b9\uff0c\u6ca1\u6709\u65ad\u70b9\u5219\u5230\u7a0b\u5e8f\u7ed3\u675f\uff1aStep filter

s\uff08or step\uff09\uff1a\u8fdb\u5165\u51fd\u6570\uff0c
Step into\uff0c\u5355\u6b65\u8df3\u5165

r\uff08or return\uff09\uff1a\u8df3\u51fa\u51fd\u6570\uff0cStep return

l\uff08or list\uff09\uff1a\u67e5\u770b\u5f53\u524d\u4ee3\u7801\u6bb5

q\uff08or quit\uff09\uff1a\u9000\u51fa\u5f53\u524ddebug

p\uff08or print\uff09\uff1a\u6253\u5370\u53d8\u91cf\u503c


h\uff08or help\uff09\uff1a\u67e5\u770b\u5e2e\u52a9

cl\uff08clear\uff09\uff1a\u6e05\u9664\u6240\u6709\u8282\u70b9

disable [bpnumber[bpnumber]]\uff1a\u5c06\u7b2cnum\u4e2a\u65ad\u70b9\u5931\u6548\uff0cenable\uff0c\u5931\u6548\u7b2c10\u4e2a\u65ad\u70b9

enable [bpnumber[bpnumber]]\uff1a\u542f\u7528\u7b2cnum\u4e2a\u65ad\u70b9\uff0cenable 10\uff0c\u542f\u7528\u7b2c10\u4e2a\u65ad\u70b9

w\uff08where\uff09\uff1a\u6253\u5370\u5806\u6808\u4fe1\u606f

a\uff08args\uff09\uff1a\u6253\u5370\u5f53\u524d\u51fd\u6570\u53c2\u6570\u4fe1\u606f


\u5f53\u7136\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528pdb\u5e93\u7684\u51fd\u6570\uff0c\u6765\u5b9e\u73b0\u5bf9py\u7684debug\uff1a

\u6bd4\u5982\uff1a\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528pdb\u51fd\u6570\uff1aset_trace()

def func(num):
s = num * 10

return s

if __name__ == '__main__':
print 'debug starting...'
print '*' * 10
pdb.set_trace()
print 'debug ending\u2026'
num = 100
s = func(num)
print s
\u6267\u884c\u7a0b\u5e8f\uff1apython pdb_demo.py

\u6b64\u65f6\u610f\u5473\u7740\u7ed9\u7a0b\u5e8f\u8bbe\u7f6e\u65ad\u70b9\u884c\uff0c\u5c06\u4f1a\u81ea\u52a8\u8fd0\u884c\u81f3print \u2018py ending...\u2019\u505c\u4f4f\uff0c\u8ba9\u5f00\u53d1\u8005\u7ee7\u7eed\u89e6\u53d1\u63a5\u4e0b\u6765\u7684\u64cd\u4f5c\uff0c\u8be5\u64cd\u4f5c\u5728\u4e00\u4e2apy\u5f15\u7528\u5176\u4ed6py\u7684\u65f6\u5019\uff0c\u8bbe\u7f6e\u65ad\u70b9\u6070\u5230\u597d\u5904\u3002

1)确保gdb版本>=7.0
2)安装python-debuginfo包。
如:python-debuginfo-2.6.6-29.el6_2.2.x86_64.rpm,这个版本号一定要跟你所用的python版本一致(可以rpm -qa|grep python查看你安装的python的详细版本号)。
Centos下找包地址为:http://debuginfo.centos.org/6/x86_64/。
3)就可以运行命令
#gdb python pid
进行调试。

linux下gdb如何调试python程序
(1)假设要debug的进程号为1000,运行如下命令:
$ gdb -p 1000
使用此命令即可使gdb附加到进程。
(2)载入libpython脚本
如果你的gdb是redhat或fedora等厂商修改过的,会有--python选项,使用此选项即可指定gdb启动时载入的Python扩展脚本(此脚本是扩展gdb的,不是我们需要debug的脚本)。
$ gdb --python /path/to/libpython .py -p 1000
如果安装的是GNU的gdb,就需要打开gdb后手动载入libpython.py脚本
(gdb) python
> import sys
>sys.path.insert(0, '/path/to/libpython.py' )
> import libpython
>end
(gdb)
这时就可以使用py-bt命令打印当前线程的Python traceback了。libpython还提供很多命令,例如py-print打印变量,py-locals打印所有本地变量等等,详细可打开libpython.py查看。

  • 濡備綍浣跨敤linux涓媑db鏉璋冭瘯python绋嬪簭
    绛旓細gdb鏄敤鏉ヨ皟璇曚簩杩涘埗绋嬪簭鐨锛屼笉鑳借皟璇昿ython鑴氭湰銆俻ython鑷甫pdb妯″潡锛屽彲浠ョ敤鏉ヨ皟璇曡嚜宸辩殑鑴氭湰銆浣跨敤python -m pdb <鑴氭湰.py>锛屼氦浜掓柟寮忥紝鍛戒护涓巊db绫讳技銆
  • 宓屽叆寮linux璋冭瘯鏂规硶宓屽叆寮弆inux璋冭瘯
    绛旓細宓屽叆寮忓紑鍙戞椂锛孡inux涓庡紑鍙戞澘鎬庢牱杩炴帴锛熻繖涓簲璇ュ彧鑳藉湪Linux涓嬮潰瀹夎eclipse,鐒跺悗瀹夎cdt(寤虹珛c/c++宸ョ▼鐢鐨)鏈鍚庡缓绔嬩竴涓猠clipse宸ョ▼鐒跺悗淇敼缂栬瘧鐔熸倝鎶奼cc鏀规垚arm-linux-gcc(鎴栬呭叾浠)绛変氦鍙夌紪璇.灏辫兘缂栬瘧浜.濡傛灉瑕佸湪绾胯皟璇 闇瑕佸湪Linux涓嬪畨瑁卆rm-gdb鏉垮瓙涓婂畨瑁呬竴涓斁缃竴涓猤dbserver.灏卞彲浠ヨ繘琛屽崟姝ヨ皟璇曚簡...
  • linux涓,鎬庝箞杩涘叆debug,姹傚姪
    绛旓細涓姝ユ鍙綘鎬庝箞鐢锛屽緢濂藉緢寮哄ぇ http://blog.csdn.net/yihucha166/archive/2009/04/14/4073735.aspx 琛ュ厖鍥炵瓟锛氭瘮濡備綘鏈変竴涓猚pp鏂囦欢 xx.cpp 浣犲厛缂栬瘧 gcc -g -o xx xx.cpp 鍐嶇敤gdb gdb ./xx.cpp 杩欐牱灏卞彲浠ヤ簡銆傚啀琛ュ厖锛屾垜缁鐨杩炴帴閲岄潰杩欎簺閮芥湁锛屼竴姝ユ锛屽緢娓呮櫚鐨勩
  • linux涓code-server绂荤嚎杩滅▼璋冭瘯C++浠g爜
    绛旓細鐜锛氬垱寤烘椂闂达細2022-02-24 淇敼鏃堕棿锛2022-02-24 linux涓嬩娇鐢╣db璋冭瘯绋嬪簭鏄竴涓熀鏈搷浣溿傛湰鏂囦粙缁嶄娇鐢╟ode-server + gdb绂荤嚎杩滅▼璋冭瘯C++鐨刢make宸ョ▼銆傛渶缁堟晥鏋滐細鍙互鍦ㄦ病鏈塆UI鐣岄潰鐨刢entos涓婏紝鍦╳indows涓婁互娴忚鍣ㄧ殑鏂瑰紡璋冭瘯centos涓婄殑C++绋嬪簭銆傞暅鍍忓姞閫 瀹夎 鐩綍缁撴瀯锛歵est.cpp myprint.h myprint....
  • linux鐢╣db璋冭瘯閬囧埌鍑芥暟璋冪敤鎬庝箞鍔?
    绛旓細渚嬪浣犲嚭鐜板嚱鏁拌皟鐢ㄧ殑閭d竴琛屼负N琛岋紝閭d綘鍙互杩欐牱鍋氾細break (N-1)run 鐒跺悗绋嬪簭灏变細鎵ц鍒癗-1琛屽仠涓嬫潵锛屾帴涓嬫潵浣犲彲浠ラ夋嫨搴曚笅鐨2涓懡浠涓殑涓涓細next //鎵ц涓嬩竴琛屾簮浠g爜锛屼絾骞朵笉杩涘叆璋冪敤鍑芥暟鍐呴儴 step //鎵ц涓嬩竴琛屾簮浠g爜锛岃繘鍏ュ嚱鏁板唴閮紝褰撶劧锛岃繖涓椂鍊欙紝浣犲彲浠ュ湪璋冪敤鍑芥暟閲岄潰鍔犳柇鐐 ...
  • 濡備綍浣跨敤gdb璋冭瘯澶氳繘绋
    绛旓細鐒惰岋紝鏈夌殑鏃跺欙紝鎴戜滑鎯冲悓鏃惰皟璇曠埗杩涚▼鍜屽瓙杩涚▼锛屼互涓婄殑鏂规硶灏变笉鑳芥弧瓒充簡銆Linux鎻愪緵浜唖et detach-on-fork mode鍛戒护鏉ヤ緵鎴戜滑浣跨敤銆傚叾浣跨敤鐨mode鍙互鏄互涓嬬殑涓绉嶏細on 鍙皟璇曠埗杩涚▼鎴栧瓙杩涚▼鐨勫叾涓竴涓(鏍规嵁follow-fork-mode鏉ュ喅瀹)锛岃繖鏄粯璁ょ殑妯″紡銆俹ff 鐖跺瓙杩涚▼閮藉湪gdb鐨鎺у埗涔嬩笅锛屽叾涓竴涓繘绋嬫甯...
  • linux瀹夎gdblinux瀹夎gdb
    绛旓細4.瀹夎缁撴潫鍚庯紝鍐嶄娇鐢ㄥ懡浠も渞pm-qa|grepgdb鏌ヨ锛屽鏋滄垚鍔熷畨瑁呬簡锛屽簲璇ユ樉绀哄涓嬶細#rpm-qa|grepgdbgdb-6.8-37.el55.濡傛灉瀹夎涓嶆垚鍔燂紝妫鏌ヤ竴涓嬮敊璇俊鎭紝鏈夊彲鑳芥槸鍥犱负灏戝畨瑁呬簡涓浜涘叧鑱旓紝鏍规嵁鎻愮ず瀹夎鍗冲彲銆濡備綍浣跨敤linux涓媑db鏉璋冭瘯python绋嬪簭锛(1)鍋囪瑕乨ebug鐨勮繘绋嬪彿涓1000,杩愯濡備笅鍛戒护:$gdb-p1000...
  • 鍦║buntu Linux涓嬬敤gdb璋冭瘯绋嬪簭,<gdb>list涔嬪悗绋嬪簭涓嶄粠绗竴琛屽紑濮嬫樉绀...
    绛旓細浣跨敤 gdb l 1;//鍦╨ist 鍚庨潰鍔1.鍏蜂綋浣跨敤鏂规硶鐪嬫垜涓嬮潰鐨鏂囨。 Gdb list浣跨敤浠嬬粛 GDB 鍙互鎵撳嵃鍑烘墍璋冭瘯绋嬪簭鐨勬簮浠g爜锛屽綋鐒讹紝鍦ㄧ▼搴忕紪璇戞椂涓瀹氳鍔犱笂-g鐨勫弬鏁帮紝鎶婃簮绋嬪簭淇℃伅缂栬瘧鍒版墽琛屾枃浠涓銆備笉鐒跺氨鐪嬩笉鍒版簮绋嬪簭浜嗐傚綋绋嬪簭鍋滀笅鏉ヤ互鍚庯紝 GDB浼氭姤鍛婄▼搴忓仠鍦ㄤ簡閭d釜鏂囦欢鐨勭鍑犺涓娿備綘鍙互鐢╨ist鍛戒护鏉...
  • linux涓媑db璋冭瘯鍦ㄥ惎鍔╣db鏃朵负浠涔堜細鍑虹幇command not found
    绛旓細7銆./configure --target=arm-linux -host=arm-linux 8銆乵akc CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc 缃戜笂閮借繖涔堣銆備絾鏄兘濂藉儚娌℃湁鎴愬姛銆傛垜涔熻鐨勫緢閮侀椃 鏈鍚庡共鑴嗙洿鎺ヤ粠鍙互浣跨敤gdb鐨鏈哄瓙涓/usr/bin涓鎷蜂簡涓や釜鏂囦欢gdb,gdbserver鍒版垜鐨勭數鑴戠殑/usr/bin鐩綍涓嬶紝灏卞彲浠ヤ娇鐢ㄤ簡锛屽悙浜嗕竴鍙...
  • 濡備綍鍦 Linux 涓璋冭瘯鍔ㄦ侀摼鎺ュ簱
    绛旓細澶у閮界煡閬撳湪 Linux 鍙互鐢 gdb 鏉璋冭瘯搴旂敤绋嬪簭锛屽綋鐒跺墠鎻愭槸鐢 gcc 缂栬瘧绋嬪簭鏃惰鍔犱笂 -g 鍙傛暟銆傛垜杩欑瘒鏂囩珷閲屽皢璁ㄨ涓涓嬬敤 gdb 鏉ヨ皟璇曞姩鎬侀摼鎺ュ簱鐨闂銆傞鍏堬紝鍋囪鎴戜滑鍑嗗杩欐牱鐨勪竴涓姩鎬侀摼鎺ュ簱锛歈UOTE:搴撳悕绉版槸锛 ggg 鍔ㄦ侀摼鎺ュ簱鏂囦欢鍚嶆槸锛 libggg.so 澶存枃浠舵槸锛 get.h 鎻愪緵杩欐牱涓や釜鍑芥暟璋冪敤...
  • 扩展阅读:free linux vps server ... linux安装g++ ... 小型linux服务器购买 ... linux为什么很少人用 ... linux gdb 调试教程 ... linux gdb命令 ... linux网站入口 ... gdb 调试 ... gdb continue命令 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网