感谢高老师讲解,受益匪浅。总结一下本节课的所有知识点,欢迎大家改正和补充: 代码中加入一行breakpoint(),会在此处设置断点,程序运行到这里会进入pdb 进入pdb之后,检视当前程序状态的命令: p --(print)打印变量,可以打印任合法的python expression w --(where)看调用栈 l --(list)看当前位置附近的源代码,默认11行 l. -- 回到当前行数 ll --(long list)显示当前函数全部代码 u --(up)到调用栈当前帧的上一层 d --(down) 进入pdb后,控制当前程序的命令: n --(next)执行当前行 s --(step)如果当前行包含其它函数调用,进入子函数 retval -- 拿到函数返回值 until -- 运行到比当前行数大的行为止。用于debug时跳出循环 until 10 -- 加参数,运行到行数>=10 r --(return)在函数里,停到函数返回之前 lst = [1,2,3] -- 可以在pdb里面,手动修改任何变量 c --(continue)继续,到下一个breakpoint 如何不修改代码,用pdb调试程序: python -m pdb example.py 不在代码中加breakpoint,程序直接进入pdb模式 b -- (break)列出所有breakpoint b 5 --(break)加参数,在pdb模式下,用命令行在当前代码的第5行加一个breakpoint,可以用ll查看当前代码,用命令c让程序直接跑到断点停下 q --(quit)从debugger退出 b inspect.currentframe -- (break)加参数,在pdb模式下,直接在第三方库函数中加断点 clear -- 删除所有breakpoint clear 1 -- 删除第1个breakpoint
Пікірлер: 45
感谢高老师讲解,受益匪浅。总结一下本节课的所有知识点,欢迎大家改正和补充: 代码中加入一行breakpoint(),会在此处设置断点,程序运行到这里会进入pdb 进入pdb之后,检视当前程序状态的命令: p --(print)打印变量,可以打印任合法的python expression w --(where)看调用栈 l --(list)看当前位置附近的源代码,默认11行 l. -- 回到当前行数 ll --(long list)显示当前函数全部代码 u --(up)到调用栈当前帧的上一层 d --(down) 进入pdb后,控制当前程序的命令: n --(next)执行当前行 s --(step)如果当前行包含其它函数调用,进入子函数 retval -- 拿到函数返回值 until -- 运行到比当前行数大的行为止。用于debug时跳出循环 until 10 -- 加参数,运行到行数>=10 r --(return)在函数里,停到函数返回之前 lst = [1,2,3] -- 可以在pdb里面,手动修改任何变量 c --(continue)继续,到下一个breakpoint 如何不修改代码,用pdb调试程序: python -m pdb example.py 不在代码中加breakpoint,程序直接进入pdb模式 b -- (break)列出所有breakpoint b 5 --(break)加参数,在pdb模式下,用命令行在当前代码的第5行加一个breakpoint,可以用ll查看当前代码,用命令c让程序直接跑到断点停下 q --(quit)从debugger退出 b inspect.currentframe -- (break)加参数,在pdb模式下,直接在第三方库函数中加断点 clear -- 删除所有breakpoint clear 1 -- 删除第1个breakpoint
@kevinxin3437
Ай бұрын
谢谢你的笔记和总结😊
感谢高工,受益匪浅!
謝謝, 看起來跟gdb差不多用法 太棒了
這東西好用! 學到了!
學習了
高工可以展开更深入的讲一讲pdb吗?谢谢!
It is similar to Gdb, debugging c code.
學習了 這個可以應用到leetcode debugger嗎?
pylint或者vsc的自带插件也行
原來B是斷點 我老是想到不好的意思 也不能說是不好的意思 是生命的出口的意思
这和GDB很像,不过GDB要在编译的时候用-g,不然生成的.o或者.exe就不能进入调试状态了
在使用TUI库的时候pdb也不好使了,会出现卡死或乱码的情况
長知識
pdb在repl下的help很难看懂, 缺少一个首页直接给出每个命令的一两句简介. 现在的这个应该叫做cheet sheet. 还有大佬要是能讲讲post mortem就更好了
平时debug都直接用vs code的断点了。这个命令行也蛮有趣的
@Cordic45
Ай бұрын
我的工作環境不方便使用vs code 所以pdb真的非常好用
@bingyanliu6370
Ай бұрын
感觉用服务器的话就不太好用vs code的断点 因为没有GUI 还是有用武之地的
@duzhuo
Ай бұрын
@@bingyanliu6370 vscode可以远程连接到服务器,按需求来吧
@drayg0n806
Ай бұрын
@@bingyanliu6370 Vscode也有官方的遠端開發extension, server執行code也可以設斷點
@porcorosso4330
Ай бұрын
@@bingyanliu6370 硬要說的話 你是可以在服務器上面 安裝 code 的 docker container... 然後再用網頁端去看你的代碼...
卧槽 流弊~ 涨姿势了 👍
大神可以讲讲远程debug的原理吗,很多时候本地有个文件,但debug的时候代码实际上是运行在远程服务器上的,但却仍然可以通过IDE在本地文件上断点调试,感觉很神奇,不知道是不是IDE在中间充当了一个交流debugger命令和结果的角色,还是有专门的 远程debug库可以实现这一点?
@hughAI
14 күн бұрын
电脑是不是进行了远程开发
我只会按箭头😂
这个pycharm编辑器debugger会不会更简单呢
@kirkzhang3483
Ай бұрын
会更简单些,还提供了更多信息,其实本质上也是PDB的功能或者原理跟PDB相同
@piaopeter
Ай бұрын
Pycharm自带的debugger 没法自动停在错误代码之前。PDB有post_mortem() 模式,可以在复杂的循环中暂停执行,进入调试。
@kirkzhang3483
28 күн бұрын
@@piaopeter 用pycharm打好断点就可以
無論任何你也說服不了我改變print("asdasd")的習慣
(儲存影片) 然後下次 debug 還是用 print 😅
想請問,為什麼不直接在 vscode 的介面上,直接設下紅色 break point,接著只要滑鼠指到想看的變數上,就可以直接觀看這個變數了 ? (誠心發問)
@LaoZhao11
Ай бұрын
因為 vscode 也是依賴 pdb 在幫你 debug 少數情況需要比較刁鑽的 debug 時 Gui 會幫不上忙
@user-zz4qi7uc1o
Ай бұрын
@@LaoZhao11 謝謝你的回答。比方說有些較複雜的 Dict 結構,或是某些 ndarray,如果用 print 對我來說會很難可視化,所以我平時非常依賴斷點調適 (gui 行數那邊直接下斷點,然後 F9 慢慢一行一行執行,直接用滑鼠看變數),看到大部分人都用 print 的方式 debug,就有點懷疑自己是不是養成不好的習慣。
@jacobjiang1809
Ай бұрын
大型的项目,比如后端开发和大模型训练,都是在服务器环境进行调试的。 虽然现代IDE,比如vscode/pycharm支持SSH远程调试,但是受限于安全原因,服务器上的SSH配置可能变得非常繁琐。 所以基于命令行的原生调试工具比如gdb/pdb就会显得很方便。 另外就是,一些命令行的代码编辑工具,比如vim/emacs,熟悉快捷键后,开发效率不输IDE,vim/emacs+gdb/pdb的组合,整体上效率更高一些。
@user-zz4qi7uc1o
Ай бұрын
@@jacobjiang1809 謝謝你的分享!受益了!
@waynechen251
7 күн бұрын
@@user-zz4qi7uc1o 能解決問題就是好方法 盡可能知道多種方法 才能適時挑選當下條件最優解
为何不直接用ide的debugger,感觉更好用,pycharm或者vscode
@Cordic45
Ай бұрын
我的工作環境基本上沒有辦法使用ide 這時候pdb就很好用了
笑死,发现用户名gaogaotiantian
不如print
@leafyoung
Ай бұрын
你这是把print当成logging来用。对于复杂的程序,能够在断点处修改程序数据做测试可以很方便复现问题,或是测试改正的方案。
@moghenryV
Ай бұрын
那只能说,你的程序还没复杂到需要用的pdb