【python】来学学debugger吧,不能只会用print调试呀!

Ғылым және технология

这期视频讲一下Python自带的debugger pdb的基础用法,以及调试器的基本概念。print虽好,但是也有不灵的时候。

Пікірлер: 45

  • @PoolsharkTang
    @PoolsharkTangАй бұрын

    感谢高老师讲解,受益匪浅。总结一下本节课的所有知识点,欢迎大家改正和补充: 代码中加入一行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

    @kevinxin3437

    Ай бұрын

    谢谢你的笔记和总结😊

  • @xichuanxc
    @xichuanxcАй бұрын

    感谢高工,受益匪浅!

  • @sparkquantum
    @sparkquantumАй бұрын

    謝謝, 看起來跟gdb差不多用法 太棒了

  • @Mingming_Studio
    @Mingming_StudioАй бұрын

    這東西好用! 學到了!

  • @omeletwithoutegg
    @omeletwithouteggАй бұрын

    學習了

  • @andycheng5639
    @andycheng5639Ай бұрын

    高工可以展开更深入的讲一讲pdb吗?谢谢!

  • @micro.nahida
    @micro.nahidaАй бұрын

    It is similar to Gdb, debugging c code.

  • @f840810
    @f840810Ай бұрын

    學習了 這個可以應用到leetcode debugger嗎?

  • @qiyuzhong4287
    @qiyuzhong4287Ай бұрын

    pylint或者vsc的自带插件也行

  • @yuan.pingchen3056
    @yuan.pingchen3056Ай бұрын

    原來B是斷點 我老是想到不好的意思 也不能說是不好的意思 是生命的出口的意思

  • @kevinxin3437
    @kevinxin3437Ай бұрын

    这和GDB很像,不过GDB要在编译的时候用-g,不然生成的.o或者.exe就不能进入调试状态了

  • @wsyong11
    @wsyong11Ай бұрын

    在使用TUI库的时候pdb也不好使了,会出现卡死或乱码的情况

  • @paxetin
    @paxetin21 күн бұрын

    長知識

  • @copdips
    @copdipsАй бұрын

    pdb在repl下的help很难看懂, 缺少一个首页直接给出每个命令的一两句简介. 现在的这个应该叫做cheet sheet. 还有大佬要是能讲讲post mortem就更好了

  • @hengzhang9671
    @hengzhang9671Ай бұрын

    平时debug都直接用vs code的断点了。这个命令行也蛮有趣的

  • @Cordic45

    @Cordic45

    Ай бұрын

    我的工作環境不方便使用vs code 所以pdb真的非常好用

  • @bingyanliu6370

    @bingyanliu6370

    Ай бұрын

    感觉用服务器的话就不太好用vs code的断点 因为没有GUI 还是有用武之地的

  • @duzhuo

    @duzhuo

    Ай бұрын

    @@bingyanliu6370 vscode可以远程连接到服务器,按需求来吧

  • @drayg0n806

    @drayg0n806

    Ай бұрын

    ​@@bingyanliu6370 Vscode也有官方的遠端開發extension, server執行code也可以設斷點

  • @porcorosso4330

    @porcorosso4330

    Ай бұрын

    ​@@bingyanliu6370 硬要說的話 你是可以在服務器上面 安裝 code 的 docker container... 然後再用網頁端去看你的代碼...

  • @UCan927
    @UCan927Ай бұрын

    卧槽 流弊~ 涨姿势了 👍

  • @xinyuzhu4448
    @xinyuzhu4448Ай бұрын

    大神可以讲讲远程debug的原理吗,很多时候本地有个文件,但debug的时候代码实际上是运行在远程服务器上的,但却仍然可以通过IDE在本地文件上断点调试,感觉很神奇,不知道是不是IDE在中间充当了一个交流debugger命令和结果的角色,还是有专门的 远程debug库可以实现这一点?

  • @hughAI

    @hughAI

    14 күн бұрын

    电脑是不是进行了远程开发

  • @didi098710
    @didi098710Ай бұрын

    我只会按箭头😂

  • @user-ix7td7ny5d
    @user-ix7td7ny5dАй бұрын

    这个pycharm编辑器debugger会不会更简单呢

  • @kirkzhang3483

    @kirkzhang3483

    Ай бұрын

    会更简单些,还提供了更多信息,其实本质上也是PDB的功能或者原理跟PDB相同

  • @piaopeter

    @piaopeter

    Ай бұрын

    Pycharm自带的debugger 没法自动停在错误代码之前。PDB有post_mortem() 模式,可以在复杂的循环中暂停执行,进入调试。

  • @kirkzhang3483

    @kirkzhang3483

    28 күн бұрын

    @@piaopeter 用pycharm打好断点就可以

  • @someguy1428
    @someguy1428Ай бұрын

    無論任何你也說服不了我改變print("asdasd")的習慣

  • @HungChunCheng-fu9fd
    @HungChunCheng-fu9fdАй бұрын

    (儲存影片) 然後下次 debug 還是用 print 😅

  • @user-zz4qi7uc1o
    @user-zz4qi7uc1oАй бұрын

    想請問,為什麼不直接在 vscode 的介面上,直接設下紅色 break point,接著只要滑鼠指到想看的變數上,就可以直接觀看這個變數了 ? (誠心發問)

  • @LaoZhao11

    @LaoZhao11

    Ай бұрын

    因為 vscode 也是依賴 pdb 在幫你 debug 少數情況需要比較刁鑽的 debug 時 Gui 會幫不上忙

  • @user-zz4qi7uc1o

    @user-zz4qi7uc1o

    Ай бұрын

    @@LaoZhao11 謝謝你的回答。比方說有些較複雜的 Dict 結構,或是某些 ndarray,如果用 print 對我來說會很難可視化,所以我平時非常依賴斷點調適 (gui 行數那邊直接下斷點,然後 F9 慢慢一行一行執行,直接用滑鼠看變數),看到大部分人都用 print 的方式 debug,就有點懷疑自己是不是養成不好的習慣。

  • @jacobjiang1809

    @jacobjiang1809

    Ай бұрын

    大型的项目,比如后端开发和大模型训练,都是在服务器环境进行调试的。 虽然现代IDE,比如vscode/pycharm支持SSH远程调试,但是受限于安全原因,服务器上的SSH配置可能变得非常繁琐。 所以基于命令行的原生调试工具比如gdb/pdb就会显得很方便。 另外就是,一些命令行的代码编辑工具,比如vim/emacs,熟悉快捷键后,开发效率不输IDE,vim/emacs+gdb/pdb的组合,整体上效率更高一些。

  • @user-zz4qi7uc1o

    @user-zz4qi7uc1o

    Ай бұрын

    @@jacobjiang1809 謝謝你的分享!受益了!

  • @waynechen251

    @waynechen251

    7 күн бұрын

    @@user-zz4qi7uc1o 能解決問題就是好方法 盡可能知道多種方法 才能適時挑選當下條件最優解

  • @jian294
    @jian294Ай бұрын

    为何不直接用ide的debugger,感觉更好用,pycharm或者vscode

  • @Cordic45

    @Cordic45

    Ай бұрын

    我的工作環境基本上沒有辦法使用ide 這時候pdb就很好用了

  • @user-uk2mr5ys5b
    @user-uk2mr5ys5bАй бұрын

    笑死,发现用户名gaogaotiantian

  • @MZstudioservice
    @MZstudioserviceАй бұрын

    不如print

  • @leafyoung

    @leafyoung

    Ай бұрын

    你这是把print当成logging来用。对于复杂的程序,能够在断点处修改程序数据做测试可以很方便复现问题,或是测试改正的方案。

  • @moghenryV

    @moghenryV

    Ай бұрын

    那只能说,你的程序还没复杂到需要用的pdb

Келесі