标签: pdb

注意python中的变量

有一个庞大的python项目,其中一个类的一个属性在某些地方只有错误的值.

它应该是sqlalchemy.orm.attributes.InstrumentedAttribute,但是当我运行测试时它是常量值,让我们说字符串.

有一些方法可以在调试模式下运行python程序,并在每个步骤之后自动执行一些检查(如果变量更改类型)吗?

PS我知道如何在inspect和property decorator的帮助下记录类实例属性的变化.可能在这里我可以使用这种方法与元类...

但有时我需要更一般和更强大的解决方案......

谢谢.

PPS我需要类似的东西:https://stackoverflow.com/a/7669165/816449,但可能会更详细地解释该代码中发生的事情.

python debugging introspection pdb

15
推荐指数
2
解决办法
2万
查看次数

如何使用远程pdb连接调试在Heroku上运行的Django应用程序?

要调试我在Heroku上看到但在本地计算机上没有看到的错误,我正在尝试进行逐步调试.

import pdb; pdb.set_trace()由于您无法访问连接到应用程序的控制台,因此典型方法不适用于Heroku,但显然您可以使用rpdb,即pdb的"远程"版本.

所以我安装了rpdb,import rpdb; rpdb.set_trace()在适当的位置添加.当我发出命中rpdb行的请求时,应用程序按预期挂起,我在heroku日志中看到以下内容:

pdb is running on 3d0c9fdd-c18a-4cc2-8466-da6671a72cbc:4444
Run Code Online (Sandbox Code Playgroud)

好的,那么如何连接到正在运行的pdb?我试图heroku run nc 3d0c9fdd-c18a-4cc2-8466-da6671a72cbc 4444从heroku的系统中尝试连接到命名主机,但只是立即退出状态1并且没有错误消息.

所以我的具体问题是:我现在如何连接到这个远程pdb?

一般相关的问题是:这是否是在Heroku上运行的应用程序的这种交互式调试的正确方法?有没有更好的办法?

注意:重庆CELERY:注意,我现在也尝试过与Celery类似的方法,但无济于事.默认主机celery的rdb(远程pdb包装器)使用的是localhost,当它是Heroku时你无法获得.我已经尝试将CELERY_RDB_HOST环境变量用于Heroku上托管的网站域,但是它提供了"无法分配请求的地址"错误.所以它是相同的基本问题 - 如何连接到在Heroku上运行的远程pdb实例?

python django debugging heroku pdb

15
推荐指数
1
解决办法
3433
查看次数

在使用pdb调试python时如何更改值?

我想运行pdb,逐步执行代码,并在某些时候更改某个名称指向的值.所以我可能想要更改名称'stationLat'指向的值.但似乎我做不到.这是一个例子:

>>> import extractPercentiles
>>> import pdb
>>> pdb.run( "extractPercentiles.extractOneStation()" )
> <string>(1)<module>()->None
(Pdb) s
--Call--
> /scratch/extractPercentiles.py(96)extractOneStation()
-> def extractOneStation() :
(Pdb) tbreak 132
Breakpoint 3 at /scratch/extractPercentiles.py:132
(Pdb) c

Deleted breakpoint 3
> /scratch/extractPercentiles.py(132)extractOneStation()
-> stationLon = float(stationLoc[3])
Run Code Online (Sandbox Code Playgroud)

所以现在我在一个我想改变stationlat价值的地方.Pdb似乎允许我将stationLat设置为新值,但是当我检查该值时,它保持不变:

(Pdb) stationLat
-34.171100000000003
(Pdb) stationLat = -40
(Pdb) stationLat   
-34.171100000000003
(Pdb) !stationLat = -40
(Pdb) stationLat
-34.171100000000003
(Pdb) 
Run Code Online (Sandbox Code Playgroud)

你可以看到我试过用!同样,没有成功.

pdb手册说我应该能够改变变量:

调试器无法识别的命令被假定为Python语句,并在被调试程序的上下文中执行.Python语句也可以带有感叹号(!)作为前缀.这是检查正在调试的程序的有效方法; 甚至可以更改变量或调用函数

这是范围问题吗?是否与我开始pdb的方式有关?我尝试了嵌入式"pdb.set_trace"习惯用法,我得到了相同的结果.

谢谢阅读.

python debugging pdb

14
推荐指数
1
解决办法
8309
查看次数

使用pdb.set_trace()时没有readline支持

我有一个运行Python 2.6.X的应用程序.以交互模式启动Python解释器(使用或不使用virtualenv):readline支持工作(命令历史记录).使用相同的Python解释器启动我的应用程序(virtualenv-ed或不使用):使用pdb.set_trace()时没有可用的readline支持:游标键不起作用.操作系统是Linux.

python readline libreadline pdb

14
推荐指数
1
解决办法
1020
查看次数

启动Python调试器,同时将模块作为脚本执行

在开发Python包时,使用该-m选项在包内运行模块作为快速测试脚本非常方便.例如,对于somepackage其中的模块somemodule.py,调用

python -m somepackage.somemodule
Run Code Online (Sandbox Code Playgroud)

somepackage将运行驻留的目录,somemodule.py就像子模块一样__main__.如果包是使用所描述的明确的相对进口使用该调用语法是特别重要的位置.

同样,使用-m选项来调试脚本也很方便,如

python -m pdb somescript.py
Run Code Online (Sandbox Code Playgroud)

有没有办法同时做两件事?也就是说,我可以将模块称为脚本并同时启动调试器吗?我意识到我可以进入代码本身并插入import pdb; pdb.set_trace()我想要破解的地方,但我试图避免这种情况.

python pdb

14
推荐指数
2
解决办法
1644
查看次数

是否可以跳过 pdb / ipdb 中的断点?

有没有办法告诉 pdb 或 ipdb 跳过所有未来的断点并完成执行,就好像它们不存在一样?

python pdb ipdb

14
推荐指数
1
解决办法
2万
查看次数

ipdb 在回车后停止显示提示文本

最近,当使用设置断点时ipdb.set_trace(context=20),我可以看到我第一次输入的命令,按回车键后,下次我在 ipdb 提示符中写入指令或命令时不会显示。当我按回车键时,它会执行它并在前面的行中显示它。

直到最近才发生这种情况。我使用的是 mac,带有 iterm、最新的 ipdb 和 pytest。

编辑 2022-3-29

  • 我一直在尝试使用 shell 设置,断开 ozsh、抗原插件,看看它是否相关,但似乎没有影响。

  • 我也尝试过使用终端,而不是 iterm。

  • 以下是我所描述内容的录音: 在此输入图像描述

编辑 2022-3-31

  • 我意识到这种情况只发生在我的一个项目中
  • 无论哪种类型,出现异常后提示都会消失,否则一直正常。
  • 异常提示开始失败后,但有时不在第一个命令中
  • 我写了一个简单的 python 程序来使用相同的设置运行,但它没有发生,所以还有其他的事情搞乱了这个

编辑 2022-3-31 (2.0)

  • 花了一些时间玩这个之后,我发现这只发生在一些测试中,那些用 freezegun 装饰的测试

我正在使用 freezegun 1.2.1 和 pytest 6.2.5。当我运行此代码时,如果我执行 print 几次,光标就会消失。这是我能想到的最基本的复制测试。

导入ipdb
从 freezegun 导入 freeze_time
    
    
@freeze_time(“2022年3月12日”)
def test_prompt_ipdb():
    ipdb.set_trace()
    
test_prompt_ipdb()

我现在相信这是这两个之一的错误,很可能是 freezegun 做了一些奇特的事情。

python pdb ipdb

14
推荐指数
1
解决办法
696
查看次数

我可以使用Color输出Python调试器pdb吗?

我正在使用PDB,如果我可以添加颜色的systax突出显示它会更好.

理想情况下,我希望代码的路径更轻一些.实际代码行将突出显示语法.

我正在使用OS X和终端应用程序.Python 2.7

python debugging terminal pdb

13
推荐指数
3
解决办法
4152
查看次数

Visual Studio符号缓存中的目录名如D0C3BDDD4ADD4E87B2B5E803303B8D772是什么意思?

D:\symbols在Visual Studio选项中设置了符号缓存目录:

选项

在这个目录中,Visual Studio创建了一个层次结构,顶层目录与PDB文件名相匹配(例如ole32.pdb),在下一层是一个或多个目录,如D0C3BDDD4ADD4E87B2B5E803303B8D772(看起来像33位十六进制数字),里面是PDB文件本身,大概是,从Microsoft Symbol Servers下载.

我想这些十六进制数字代表PDB文件的版本.我想知道,这些数字是否具有任何结构或含义,以及如何从PDB文件中提取它们(理想情况下,使用C#)?

给定其他文件夹中的PDB文件,是否可以在符号缓存中找到Visual Studio调试器所需的目录?

c# debugging debug-symbols visual-studio pdb

13
推荐指数
2
解决办法
456
查看次数

如何在 VSCode 等现代 IDE 中调试 Cython 代码?

我想知道人们如何调试他们的 Cython 代码,他们是否只是按照文档中的建议使用终端调试?

这个答案表明可以使用DDD,而不是敲除 DDD ,但我不想改变调试 Cython 代码的整个工作流程。

当然,这在 VSCode 中一定是可能的吗?

cython pdb vscode-debugger

13
推荐指数
0
解决办法
4336
查看次数