调试CPython操作码栈
cpython 3.7引入了在调试器中逐步逐步逐步跨越单个操作码的能力.但是,我不知道如何从字节堆栈中读取变量. 例如,调试时 def f(a, b, c): return a * b + c f(2, 3, 4) 我想找出添加的输入是6和4. 到目前为止,我只能提出opcode信息,但我不知道如何获取OpCode输入: import dis import sys def tracefunc(frame, event, arg): frame.f_trace_opcodes = True print(event, frame.f_lineno, frame.f_lasti, frame, arg) if event == "call": dis.dis(frame.f_code) elif event == "opcode": instr = next( i fo
0 2024-04-05
编程技术问答社区
我可以在使用PDB调试时查看Python内置功能的源代码吗?
如何检查python内置功能的代码,例如步入sum()? .html#sum . 我希望看到sum()使用下面的代码和pdb中的s命令做什么: import pdb def adder(nums): x = sum(nums) return x pdb.set_trace() print adder([1, 2, 3,4]) 解决方案 一些Python模块以C(提高性能)编写,并且不能以pdb进行逐步介入.如果您确实想查看这些功能中正在发生的事情,那是可能的,但毫无疑问.要检查C函数,我通常使用GNU调试器(GDB)和启用调试符号的Python. 下载在 https://www.python.org/downloads/ untar python源代码| tar xzvf Python-2.7.6.tar.gz 输入未陷入的目录并使用|运行配置脚本./configure 用调试符号编译| make -g 使用GNU调试器启动您的
10 2024-04-05
编程技术问答社区
pdb不能在另一个线程中中断?
考虑此多线程程序: import threading class SomeThread(threading.Thread): def run(self): a = 1 print a def main(): print 'hola' someThread = SomeThread() someThread.start() if __name__ == '__main__': main() 当我使用PDB调试此程序时,在提示下,我首先在两个打印语句中的每个语句上设置一个断点.然后我继续. PDB在print 'hola'上断裂.我再次继续,在另一个线程中看到印刷品的效果,但是PDB不会破裂. 帮助命令没有列出任何要切换诸如gdb之类的线程上下文...所以...在一个线程上下文中不可能设置将在另一个上下文中绊倒的断点? 解决方案 这对我有用: import threading import pdb class Some
2 2024-04-03
编程技术问答社区
如何从Python源代码闯入调试器?
您将什么插入python源代码中将其分解为PDB(执行到该位置时)? 解决方案 import pdb; pdb.set_trace() 参见初学者为此和更有用的提示. 其他解决方案 从Python 3.7开始,您可以使用breakpoint() - https ://docs.python.org/3/library/functions.html#breakpoint
2 2024-04-03
编程技术问答社区
Yocto:在一个图像配方中创建一个符号链接
我有一个自定义的yocto'image'食谱,该食谱使用IMAGE_INSTALL += "... "构造图像,其中还包含python 3.5.不幸的是,没有创建经常使用的/usr/bin/pdb symlink,我的用户希望能够从命令行运行pdb.因此,我想在图像中为此进行单个符号链接.如果它是在目标上运行的,则将是此命令的结果: ln -s /usr/lib/python3.5/pdb.py /usr/bin/pdb 我知道我可以在图像配方中创建一个自定义任务使用这种结构: addtask create_pdb_symlink before do_image do_create_pdb_symlink () { ln -s /usr/lib/python3.5/pdb.py ${D}/usr/bin/pdb } 但是这无效,因为我猜想使用${D},而且我认为该文件系统在那时并不是上演的.它生成此错误: DEBUG: Executing shell
0 2024-03-31
编程技术问答社区
使用BioPython读取整个目录中的.pdb文件
我最近的任务是在Python编写一个程序,以在与.pdb(蛋白质数据库)中的蛋白质中的每一种金属之间找到与蛋白质中的每种金属之间的原子.这是我为此写的脚本. from Bio.PDB import * parser = PDBParser(PERMISSIVE=True) def print_coordinates(list): neighborList = list for y in neighborList: print " ", y.get_coord() structure_id = '5m6n' fileName = '5m6n.pdb' structure = parser.get_structure(structure_id, fileName) atomList = Selection.unfold_entities(structure, 'A') ns = NeighborSearch(atomList) for
2 2024-03-31
编程技术问答社区
如何使用命令行参数的脚本运行Python调试器?
我有一个python脚本,该脚本对终端中的以下命令进行了输入参数并运行(bash,mac osx). python test.py arg1 arg2 是否有一个很好的方法可以在调试模式下运行相同的脚本,而无需编辑代码以包括import pdb和pdb.set_trace()? 例如,如果我使用的是ipython控制台,我可以通过以下方式执行此操作: %run -d test.py arg1 arg2 这很简单,不是吗?为了在终端中实现同一件事,我认为以下内容可能起作用,但事实并非如此: python -c "import pdb; import sys; sys.argv = ['test.py', arg1, arg2];pdb.run('test.py')" 代码与参数一起运行,但不在pdb的调试模式下进行.这很难做,我应该坚持pdb.set_trace或ipython的%run -d? 解决方案 在Spyder IDE(2.3.4)
12 2024-03-28
编程技术问答社区
使用FIFO运行pdb而不使用stdin/stdout
我正在使用Python开发Fuse文件系统.问题是,在安装文件系统后,我无法从保险丝脚本访问stdin/stdout/stderr.我什么都看不到,甚至是追溯.我正在尝试这样启动PDB: import pdb pdb.Pdb(None, open('pdb.in', 'r'), open('pdb.out', 'w')).set_trace() 都可以正常工作,但不便.我想将pdb.in和pdb.out作为FIFO文件制作,但不知道如何正确连接它.理想情况下,我想键入命令并在一个终端中查看输出,但即使使用两个终端也会很高兴(一个put命令并在另一个端子中看到输出).问题: 1)在没有stdin/stdout的情况下运行PDB是更好的/其他方法? 2)如何将stdin重定向到pdb.in fifo(我键入的所有内容都必须转到pdb.in)?我如何将pdb.out重定向到stdout(我对" cat pdb.out"遇到了奇怪的错误,但也许我不了解某些东西)
0 2024-03-27
编程技术问答社区
编辑后保持PDB文件格式。
我有xxx.pdb文件为: ATOM 1910 CB SER 128 45.806 50.621 39.840 1.00 9.36 ATOM 1913 OG SER 128 44.538 51.195 39.571 1.00 9.36 ATOM 1915 C SER 128 45.325 48.172 40.360 1.00 9.36 ATOM 1916 O SER 128 45.368 47.955 39.155 1.00 9.36 ATOM 1917 N SER 129 44.953 47.236 41.238 1.00 11.24 ATOM 1919 CA SER 129 44.395 45.938 40.826 1.00 11.24 ATOM 1921 CB SER 1
2 2024-03-22
编程技术问答社区
在OS X 10.8(64位)上运行wxPython 2.9
我有EPD 7.3,并通过Enth搜索的存储库安装了WXPYTHON 2.9.我尝试运行WinPDB,这需要WXPYTHON,我收到了此消息: This program needs access to the screen. Please run with a Framework build of python, and only when you are logged in on the main display of your Mac. 我在Mac上看到了WXPYTHON的类似消息,但是我还没有找到解决方案.有人知道这个消息吗?而且,是否有人让WinPDB在OS X 10.8 w/wxpython 2.9上工作? 解决方案 当用于运行WXPYTHON脚本的Python不是全框架时,此错误消息将发生. OSX要求提供全面访问的应用程序由应用程序捆绑包或框架的一部分运行. 通常,所有Pythons都是这些天的框架构建,因此无需再担心这一点,但是在某种情况下,它仍然
4 2023-12-15
编程技术问答社区
Django Gunicorn Debug
最初,我有一个带有随附的测试服务器的Django应用程序.要调试此设置,我可以在代码中的任何位置添加import pdb; pdb.set_trace(),并具有使我陷入终端中的交互式调试器的突破点. 最近,我转移到枪nif以获取一些完美的好处.使用此枪支设置时,如何获得类似的行为.我尝试通过使用debug=True和daemon=False设置枪支设置,但它不起作用. 有人可以解决这个问题吗? 解决方案 在调试器/调试模式下以反向代理配置(在nginx下)运行绿色独角兽,在 pycharm 's run/django/edit配置: 当然,请使用任何端口(而不是7777),您已将nginx配置为代理. 其他解决方案 好吧,我最近在类似问题上降临.我无法应用@dudklein解决方案(在调试器尝试输入时会遇到I/O错误-IPDB,PDB等) ) 我使用了远程Python debbuger - 在您的Virtualenv中安装winpdb
22 2023-12-15
编程技术问答社区
如何在Windows计算机上定义.pdbrc?
如何在Windows机器上定义.pdbrc? 我的.pdbrc文件: alias sl s;;l alias nl n;;l alias cl c;;l 阅读了答案后这个问题,我尝试将其放入C:\Users\中.启动pdb(使用pdb.set_trace()),我尝试了别名.他们没有认可. 我想知道如何在全球和虚拟环境中设置.pdbrc. 解决方案 pdb 此问题之所以出现,是因为 *nix操作系统(Linux,Unix,darwin等)中的每个用户都有一个/home目录,他们可以在其中放置像.pdbrc之类的运行代码.该目录的路径生活在系统变量(HOME)中,该应用程序用来指向用户的个人文件. Windows真的没有类似的东西那.与Windows上/home的最接近类比可能是C:\Users\. 这是如何定义包含路径C:\Users\的系统变量.左键单击启动按钮,然后右键单击"计算机",然后选
8 2023-12-06
编程技术问答社区
调试一个只是有点 "挂 "的python应用程序
我有一个由Python编写的事件驱动的应用程序.一段时间后(通常> 1周),它似乎只是停止响应事件.发生这种情况时,我只是Ctrl-C并重新运行,一切都很好.但是,这不断发生,这很烦人,我不知道是什么原因引起的. 有没有办法运行我的应用程序,即当发生这种情况并且应用程序不再接受连接时,我可以进入调试器,看看它在做什么以及为什么不进行连接? 我以前使用过PDB,但是我使用它的方式(if condition: pdb.set_trace())在这里并不真正适用,因为我不知道它失败时在代码中在做什么.我理想的情况是,而不是Ctrl-C,也许我击中了Ctrl-Somethingelse,这导致它停止并陷入调试器.这样的事情很容易完成吗? 解决方案 在您的情况下触发PDB可能并不简单.但是,每当我需要调试这样的悬挂时,我​​都会使用 您可以使用计时器定期调用它并将输出打印到日志文件,并在注意到挂起时参考它,或者利用某些RPC机制(例如信号)以在您的过程中触发函数调用要求.我通常会执行
6 2023-12-02
编程技术问答社区
在Emacs中获取pdb以使用当前virtualenv中的Python进程
我正在使用PDB在Emacs中调试一些Python代码,并遇到一些导入问题.这些依赖项安装在我传播的虚拟环境之一中. pdb是固执地使用/usr/bin/python,而不是我的Virtualenv中的Python过程. 我使用virtualenv.el来支持emacs内部环境的切换,并通过 中描述的后钩子进行了激活的钩子 http:/http:/http://Jesselegg.com/archives/2010/03/14/emacs-python-programmers-2-virtualenv-ipython-daemon-mode/ 运行M-X python-shell 时,这很好 >>> import sys >>> print sys.path 这表明我所有的Virtualenv库,表明Python-Shell是我的Virtualenv. 这与M-相矛盾!哪个python,给出/usr/bin/python 有人知道我如何告诉M-
4 2023-11-19
编程技术问答社区
当使用py.test时,我可以用python调试器调试吗?
我正在使用py.test进行单元测试我的python程序.我希望用Python调试器以正常方式调试我的测试代码(我的意思是代码中的pdb.set_trace(),但我无法使其正常工作. 将pdb.set_trace()放在代码中不起作用(提高ioError:在捕获输出时从stdin中读取).我还尝试使用该选项运行py.test -pdb,但是如果我想探索在断言之前发生的事情,这似乎并没有解决.当断言失败时,它会破裂,从该行继续前进意味着终止程序. 有人知道一种进行调试的方法,还是在调试和py.test并不是要在一起吗? 解决方案 这很简单:放置一个assert 0您想开始在代码中调试并使用: 进行测试 py.test --pdb 完成:) 另外,如果您使用的是pytest-2.0.1或更高版本,则还可以在测试代码中放置pytest.set_trace()助手.这是 docs .在将您发送到PDB调试器命令行之前,将要注意内部禁用捕获. 其他解决方
6 2023-11-07
编程技术问答社区
Python单元测试: 当测试失败时自动运行调试器
有没有办法在Untist失败的位置自动启动调试器? 现在,我只是手动使用pdb.set_trace(),但这非常乏味,因为我需要每次添加并在最后取出. 例如: import unittest class tests(unittest.TestCase): def setUp(self): pass def test_trigger_pdb(self): #this is the way I do it now try: assert 1==0 except AssertionError: import pdb pdb.set_trace() def test_no_trigger(self): #this is the way I would like to do it:
12 2023-11-07
编程技术问答社区
使用PDB时Django Unicodedecodeerror
每次放置: 我都注意到 import pdb; pdb.set_trace() 在我的西班牙django项目中,如果我在字符串中具有特定的unicode字符,例如: Gracias por tu colaboración 我在Django调试窗口中获得了一个UnicodeDecodeError,上面有一个"不在范围(128)"的Unicodedecodeerror.问题是我无法轻松调试我的应用程序.另一方面,如果我使用IPDB,我会得到以下内容: ERROR - failed to write data to stream: 我已经搜索了找到解决方案,但看来我是唯一一个有这个问题的人:) 解决方案 我发现另一个程序员将​​其添加到视图文件的开头,这打破了PDB和IPDB的行为,如我所述: import sys, codecs sys.stdout
8 2023-11-06
编程技术问答社区
"在 PDB 中遍历字典时出现 "语法错误:解析时意外出现 EOF
我在GET内部设置了pdb跟踪.我想打印请求对象的所有属性.我正在尝试以下内容,在PDB中: (Pdb) request (Pdb) for d in dir(request): *** SyntaxError: unexpected EOF while parsing (, line 1) 我确定这里有一些基本的东西. 解决方案 您无法在pdb中输入多行语句.但是,您可以使用commands命令如果 该代码块将在断点上执行; help commands有关更多信息. 您有时也可以将多行语句崩溃到一行中.例如: for d in dir(request): print d 在您的特殊情况下,print dir(request)或pp dir(request)似乎就足够了. 其他解决方案 在PDB提示下,执行以下操作: (Pdb) a = [1, 2, 3, 4] (Pdb) for i
12 2023-10-28
编程技术问答社区
在Tornado'的ioloop中启动异常的pdb
在独立的Python程序中执行此操作通常很有用: def excepthook(typ, value, tb): traceback.print_exception(typ, value, tb) pdb.pm() ... if log.getEffectiveLevel() == logging.DEBUG: sys.excepthook = excepthook (即,如果发生未捕获的例外,则将程序删除到pdb验尸模式中) 但这与龙卷风Ioloop BC不起作用,似乎Ioloop捕获了未捕获的异常,打印或记录它们.如果我在上方安装钩子,则该程序仅在按下CTRL-C上输入验尸模式,而Ctrl-C迟到了. : - ) 是否有一种方法可以使这种情况发生,而无需猴子龙卷风? 解决方案 您可以亚班龙卷风的ioloop和Override handle_callback_exception.请参阅 我猜这与猴子斑点没有什么不同...
12 2023-10-24
编程技术问答社区
在Windows上安装Theano-DLL加载失败
我试图在Windwos 8 上安装Theano 遵循这些步骤. 我尝试使用: 进行测试 import numpy as np import time import theano print('blas.ldflags=', theano.config.blas.ldflags) A = np.random.rand(1000, 10000).astype(theano.config.floatX) B = np.random.rand(10000, 1000).astype(theano.config.floatX) np_start = time.time() AB = A.dot(B) np_end = time.time() X, Y = theano.tensor.matrices('XY') mf = theano.function([X, Y], X.dot(Y)) t_start = time.time() tAB = mf(A, B) t_end = ti
10 2023-10-20
编程技术问答社区