展开

关键词

Python也有pdb

C有gdb,Python也有pdb 写过C的同学们想必都很怀念(读者:¿)gdb调试器,使用gdb可以随意在程序运行过程中暂停流程、查看变量。 毕竟谁也不知道可能被扔给一个什么样的环境啊哈哈 pdb的使用 作为解释型,Python调试工具的使用跟gdb毕竟还是有区别的。 -11-04-python-pdb\test_pdb_intrusive.py(21)<module>() -> c = ['p', 'y', 't', 'h', 'o', 'n'] (Pdb) 到这里已经启动了 可以在pdb环境下,执行一般的Python句。通常我们可以用来改变变量的值——要不怎么说调试器可以让你成为上帝呢?还有比这更为所欲为的吗? 一般的话这个! 其实可以省略,但是当要执行句开头的单词与pdb的已有命令冲突,就得不到预期结果了,所以建议还是加上。 这个用!领起命令的做法跟vim编辑器的逻辑很像,可以类比记忆。不熟悉的读者可以忽略。

22210

Python -- pdb调试工具

【简介调试工具】 pdb 使用如下代码就相当于添加断点了: import pdb     pdb.set_trace()  #设置断点的地方,放置于程序中 ipdb 相对于python,我们更趋向于ipython () pudb 是全屏的基于控制台的可视化调试器,有点像c中的Turbo C样式 ? 4、打印 -> p  在执行过程中我们想看,某个变量的打印值,除了c可以直接跳到下一个断点,打印期间所有值 “p”可以打印出某个变量的值,但前提是已经执行过这个变量。如下: ? 5、单步 -> s  “s”可以进入某个函数内部,然后再函数内使用n/p/b/c等 “r”将返回前面进入函数的返回句 ? n=5 (Pdb) p n 5 9、结束 -> q/exit  在调试过程,想退出结束调试,可直接运行“q”或“exit”回车即可 而ipdb用法和pdb类似,只是更友好,更直观,如下:  ?

44030
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    还在用print()句来调试Python代码?快停止吧

    回到大量的日志中去搜索我们在print句中给出的正确符号并匹配它们是很乏味的。 02 一个简单的转变 除了使用Python提供给我们的强大武器“pdb模块”,我们不需要做任何事情。 (venv) C:\Users\PycharmProjects\>python -m pdb debug_add.py > c:\users\pycharmprojects\debug_add.py(2 (Pdb) n > c:\users\pycharmprojects\debug_add.py(9)<module>() -> num=10 (Pdb) listA [2, 4, 6, 8] (Pdb) (Pdb) q (venv) C:\Users\PycharmProjects\> 使用postmortem方法的另一种方法是仅在遇到异常时停止执行,因为使用-c继续使用-m pdb python - Process finished with exit code 0 没有乱七八糟的print()句,这看起来很简单

    12330

    Python 中的 pdb 模块

    其实PYTHON中也提供了类似于C中用于debug 的 gdb。它叫做pdb。结合本人自己的学习,进行简单的举例,以做备忘和补偿学习。 pdb local.py  -c config.json > /home/test/python/shadowsocks/shadowsocks/local.py(18)<module>() -> from 三、s(step) 、  b(break) 和 c(continue) 指令 s(step) 输入的时候,可以进入这行代码中的相关函数去执行 b num 输入的时候,是在某行(num)上设置一个断点。 不过我更感觉s(step) 指令应该和b(break) 及 c(continue)结合起来一起用,这样感觉效率上更高。 ) c        # 直接走到这个断点处 > /home/test/python/shadowsocks/shadowsocks/local.py(72)<module>() -> main() (

    30220

    Oracle 12c多租户特性详解:全局用户与本地用户的原理与维护

    在 CDB 中创建的公用用户要求以 c##或C## 开头,以下测试以常规方式命名的用户将会创建失败,符合规则的用户可以被创建: ? 相对而,公用权限和角色可以跨越 Container 生效,当需要跨 Container 进行操作时,需要公用权限或角色,并且这些权限需要在现有和将来创建的 Container 中生效。 同用户管理类似,在 CDB$ROOT 中可以建立公用角色,但是不能创建本地角色,公用角色在每个 PDB 中都存在,同样需要以 c## 为前缀开头: ? 首先我们跟踪一下在 PDB 中创建用户的过程: ? 在跟踪文件目录搜索一下创建用户的句: ? 在跟踪文件中记录了创建用户的过程,密码已经被隐藏,摘录主要句如下,注意 insert 句将用户信息插入到 USER$ 表中: ?

    1K50

    Python | Debugger和pdb,鸡肋否?

    我们知道虽然入门级编程最好是C和Python,但是C和Python是有这本质的不同的,那就是C是编译型,而Python是解释型。 编译型会在编译时报错,而解释型确实在解释到某一行时报错。 上面这种属于法错误,而法错误之外还要一种义错误,也就是我们常说的这段代码存在逻辑上的错误。明明没报错,却没有得到预期的结果。 如果你有c逆向相关的经验的话,应该了解一些。 这里用来调试的示例代码是我之前写过的wnl.py,一个实现万年历功能的小程序。 Linux使用pdb进行调试。 关于pdb,如果你使用的是py2,直接在命令行输入pdb xxx.py,如果你使用的是py3,那么此处应为pdb3 xxx.py。 bdb和pdb。 所以也可以在交互模式下使用,比如import bdb或者import pdb。 ?

    70220

    Python调试方法简介

    01 断assert 凡是用print()来辅助检查的地方,我们都可以使用断来代替,就像C++里面的断(assert)一样, def foo(s): n = int(s) return / n def main(): foo('0') 如果断的结果出错,则assert句本身就会抛出Assertion Error的错误,上面的代码的输出结果如下: 02 PDB 除了assert之外,我们还可以启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。 err.py > /root/yeyz_shell/err.py()<module>() -> s = '0' (Pdb) l # err.py -> s = '0' (s) (Pdb) n > /root/yeyz_shell/err.py()<module>() -> print( / n) (Pdb) p s '0' (Pdb) p n (Pdb) q 上面的调试具体过程如下

    20910

    Oracle12.2 多租户环境下的授权管理

    3、在授权句中包含了CONTAINER=ALL 的选项。 下面的例子显示了如何全局授权给公用用户c##hr_admin。 GRANT SELECT ON DBA_OBJECTS TO c##hr_admin CONTAINER=ALL; 授予或回收PDB的访问权限 可以在多租户环境中授予和撤销PDB访问权限。 如果从root发出GRANT句,并忽略CONTAINER子句,则该特权将在本地PDB应用。 下面的句是如何通用授予公用用户c## hr_admin的CREATE TABLE权限,以便此用户可以在所有现有和新创建的容器中使用此权限。 (要使公用用户能够访问有关特定PDB的数据,请在root中发出ALTER USER句。)

    39170

    python调试代码举例

    pdb.set_trace() b = 2 c = a + b print (c) 然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了 常用的调试命令 4 at /home/jchen/regression/regressionLogCMP.py:504 condition bpnumber [condition],设置条件断点,下面句就是对第4个断点加上条件 /jchen/regression/regressionLogCMP.py:505 n(ext),让程序运行下一行,如果当前句有一个函数调用,用n是不会进入被调用的函数体中的 s(tep),跟n相似, 但是如果当前有一个函数调用,那么s会进入被调用的函数体中  c(ont(inue)),让程序正常运行,直到遇到断点  j(ump),让程序跳转到指定的行数  (Pdb) j 497 > /home/jchen ,感叹号后面跟着句,可以直接改变某个变量  q(uit),退出调试  发现在命令行下调试程序也是一件挺有意思的事情,记录下来分享一下 w ,Print a stack trace, with the

    22630

    Python学习 Day 12 调试 断 logging pdb pdb.set_trace()

    <pyshell#22>", line 4, in foo return 10 / n ZeroDivisionError: integer division ormodulo by zero 断 凡是用print来辅助查看的地方,都可以用断(assert)来替代: >>> def foo(s): n=int(s) assertn! (4)<module>() -> print 10 / n (Pdb) q Try 这种通过pdb在命令行调试的方法理论上是万能的,但实在是太麻烦 pdb.set_trace() 这个方法也是用pdb, (s) pdb.set_trace() # 运行到这里会自动暂停 print10 / n 运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c ) c Traceback (most recent call last): File "err.py", line 7, in <module> print 10 / n ZeroDivisionError

    35010

    Day13错误、调试和测试

    ,则执行finally句块,至此,执行完毕。 如果没有错误发生,可以在except句块后面加一个else,当没有错误发生时,会自动执行else句: try: print('try...') self.assertEqual(abs(-1), 1) # 断函数返回的结果与1相等 运行单元测试 if __name__ == '__main__': unittest.main() C: ---- pdb.set_trace() 调试 import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点: import pdb s = '0' n = c继续运行: > c:\python36x32bit\practice.py(7)<module>() -> print(10/n) (Pdb) p n 0 (Pdb) c Traceback (most

    40390

    对于 bug 铺天盖地的 Python 程序,该如何高效的调试?

    不管用什么在编写程序的时候,总会出现形形色色的 bug,由于程序员经常被玩坏,各种属于程序员的“俚”也被大众熟知,出现了 bug 估计连我隔壁老王的三姨妈的四表舅的远房表姐的邻居的同学的妹夫的外婆的还在喝奶的侄女都知道要 那个时候我在 写 C (我的第一门编程)的时候,出现了 bug 用 printf 查错,可能写的程序又多又烂,printf 被我用的炉火纯青,出神入化,debug 的速度比我洗脑壳的时间还要快上一分 0x00 pdb 调试 pdb 是 Python 自带的库,为 Python 提供了一种交互式的源码调试功能,包含当前调试器应有的功能,包括设置断点、单步调试、查看源码等。 其实如果你之前学过 C/C++ 的话,你可能知道 gdb 这个命令行调试工具,如果你之前用过 gdb,那么恭喜你你可以直接用 pdb 了,因为两个用法是一样的。 其实还有一个开源的 Python 调试器 -- ipdb,它和 pdb 的接口是一样的,但是 ipdb 相比于 pdb 多了法高亮,tab 自动补全等友好功能,在易用性方面做了很大的改进,这个感觉就和

    28910

    pdb && cProfile

    pdb https://docs.python.org/zh-cn/3.7/library/pdb.html#module-pdb 使用方式 1、在命令行下直接运行调试 python -m pdb 2、在需要被调试的代码中添加import pdb、pdb.set_trace()再运行代码进行调试 # test.py def func(): print('enter func()') a = 1 b = 2 import pdb pdb.set_trace() # 运行到此处启动pdb func() c = 3 print(a + b + c) ? 常用命令 简写 说明 p <变量名> 输出变量的值 l 列出源码,当前位置前后11行 n 执行吓一条句 s 执行下一条句,如果是函数,则会进入函数内,显示–call–,执行函数内第一条句,执行完函数内句后跳出显示 –return– b 列出当前所有断点 b lineno 在某行添加断点 cl 清除断点 q 退出调试pdb help 帮助 ?

    22020

    Python详解之调试:pdb

    库,发现用pdb来调 试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。      pdb.set_trace()     b = 2     c = a + b     print (c)  然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符 ;如果不带参数就是清除所有的断点 > disable/enable,禁用/激活断点 > n(ext),让程序运行下一行,如果当前句有一个函数调用,用n是不会进入被调用的函数体中的 > s(tep),跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中 > c(ont(inue)),让程序正常运行,直到遇到断点 > j(ump),让程序跳转到指定的行 ,感叹号后面跟着句,可以直接改变某个变量 > q(uit),退出调试

    55010

    12 Python 基础: 如何优化代码质量,错误、调试和测试你必须要懂.md

    凡是用print来辅助查看的地方,都可以用断(assert)来替代: # err.py def foo(s): n = int(s) assert n ! 如果断失败,assert句本身就会抛出AssertionError: $ python err.py Traceback (most recent call last): ... pdb调试环境,可以用命令p查看变量,或者用命令c继续运行: $ python err.py > /Users/michael/Github/sicp/err.py(7)<module>() -> print (10 / n) (Pdb) p n 0 (Pdb) c Traceback (most recent call last): File "err.py", line 7, in <module> 最常用的断就是assertEqual(): self.assertEqual(abs(-1), 1) # 断函数返回的结果与1相等 另一种重要的断就是期待抛出指定类型的Error,比如通过d'empty

    48330

    「Python调试器」,快速定位各种疑难杂症!!!

    现在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲的重点 pdb pdb 是 Python 自带的库,为 Python 提供了一种交互式的源码调试功能,包含当前调试器应有的功能,包括设置断点、单步调试、查看源码等。 其实如果你之前学过 c/c++ 的话,你可能知道 gdb 这个命令行调试工具,如果你之前用过 gdb,那么恭喜你你可以直接用 pdb 了,因为这哥俩一个用法。 具体如下所示(例如文件名是 test.py): python -m pdb test.py 另一种是在 Python 代码中调用 pdb 模块的 set_trace 方法设置一个断点,当程序运行到此断点的时候 黑格尔曾经说过「存在即合理」,ipdb 相比于 pdb 多了法高亮,tab 自动补全等友好功能,在易用性方面做了很大的改进,这个感觉就和 Python 和 IPython 一样。

    38050

    使用Sublime Text搭建python

    1、安装sublime text 3,然后安装package control 2、安装SublimeCodeIntel插件,可以实现法自动完成功能 3、安装AutoPEP8插件,可以自动将python 然后就出现如下的pdb调试界面。 ? 然后你就可以输出各种pdb命令进行调试了。 比如: (Pdb) b 31              #在31行建立断点 Breakpoint 1 at c:\work\code\workspace\test\sqlalchemy\docopt.py :31 (Pdb) r                    #运行到断点处 > c:\work\code\workspace\test\sqlalchemy\docopt.py(31)<module >() -> m=MyClass() (Pdb)                       #在这个命令行下就可以执行当前上下文的python

    21910

    如何使用Vim编写和调试Python代码

    c #跳到下个断点 >查看 (Pdb)p param #查看当前 变量值 (Pdb)l #查看运行到某处代码 (Pdb)a #查看全部栈内变量 >如果是在 命令行里的调试为: import pdb def tt(): pdb.set_trace() for i in range(1, 5): print i >>> tt() #这里支持 n p c 而已 > <stdin>(3)tt() (Pdb) n 基本上,nnoremap <C-J> <C-W><C-j>就是说,当我在正常模式按下<C-J>时,进行<C-W><C-j>操作 缓冲区(Buffers) 虽然Vim支持tab操作,仍有很多人更喜欢缓冲区和分割布局 注释与字符串中的内容也用于补全 let g:syntastic_ignore_files=[".*\.py$"] let g:ycm_seed_identifiers_with_syntax = 1 " 法关键字补全 bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py' let g:ycm_show_diagnostics_ui = 0 " 禁用法检查

    1.8K10

    python基础6

    ###由结果可以看出,一旦捕获到异常就不会执行下面的句,而是到了finally,如上例,捕获到NameError后,下一条句就不再执行,因此,并没有去捕获IndexError,结果也只是输出NameError ###断失败,assert 句本身抛出AssertionError### print 'hello' 执行结果: Traceback (most recent call last):   File ,就执行下面的句### print 'hello' 执行结果: hello Python 解释器执行时可以用 -O 参数来关闭 assert,把所有的 assert 句 当成 pass 例: ) c            ###继续### > /home/kiosk/PycharmProjects/pythonbasic/py5.1/error.py(83)<module>() -> print 'hello' (Pdb) c hello 2             *****************             *   正则表达式           *

    25420

    相关产品

    • 自然语言处理

      自然语言处理

      腾讯云自然语言处理(NLP)深度整合了腾讯内部顶级的 NLP 技术,依托千亿级中文语料累积,提供16项智能文本处理能力,包括智能分词、实体识别、文本纠错、情感分析、文本分类、词向量、关键词提取、自动摘要、智能闲聊、百科知识图谱查询等,满足各行各业的文本智能需求。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券