我有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都是这些天的框架构建,因此无需再担心这一点,但是在某种情况下,它仍然
以下是关于 pdb 的编程技术问答
我在lambda函数中遇到了一个问题.我可以成功将foo输出到stdout,但是使用max()(包括lambda)时会遇到错误,请参见下面的简化代码... 总的来说,我正在尝试在未知数的一阶密钥中找到嵌套键budget的最大值. (Pdb) foo = self.some_method() # some_method() returns a dict, printed in the next step (Pdb) pp foo {'1': {'count': 1, 'extra_data': {'activity-count': 1, 'budget': 0, [...MORE KEY-VALUE PAIRS HERE...] 'version': 1}, [...L
我正在使用pdb.set_trace()测试修复程序,以确保它在实施之前按预期工作并保持奇怪的错误. (Pdb) test = [1,2,3,4,4,3,2,1] (Pdb) max(range(len(test)),key=lambda i: test[i]) *** NameError: global name 'test' is not defined 所以我搬到了我的localmachine,以确保在寻求帮助之前可以尽可能简单地复制.在ipython中,我得到了完全相同的行为. In [1]: test = [1,2,3,4,4,3,2,1] In [2]: max(range(len(test)),key=lambda i: test[i]) Out[2]: 3 In [3]: import pdb; pdb.set_trace() --Call-- > /Users/tristanmatthews/anaconda/lib/python2.7/site-p
我无法理解此Python调试器中提出的以下例外: (Pdb) p [move for move in move_values if move[0] == max_value] *** NameError: name 'max_value' is not defined (Pdb) [move for move in move_values] [(0.5, (0, 0)), (0.5, (0, 1)), (0.5, (0, 2)), (0.5, (1, 0)), (0.5, (1, 1)), (0.5, (1, 2)), (0.5, (2, 0)), (0.5, (2, 1)), (0.5, (2, 2))] (Pdb) max_value 0.5 (Pdb) (0.5, (0, 2))[0] == max_value True (Pdb) [move for move in move_values if move[0] == 0.5] [(0.5, (0, 0)), (0.5, (
我正在一个项目中工作,该项目最近切换到 pytest " https://docs.python.org/3/library/unittest.html" rel =" noreferrer"> unittest 框架.我习惯于从Eclipse调用我的测试,以便可以使用调试器(例如,放置断点来分析测试失败的发展方式).现在这是不再可能的,因为运行测试的唯一方法是通过命令行Blackbox. . 是否有某种方法可以从Python内部使用pytest,以免被迫退出IDE?当然,测试不应在单独的过程中进行. 解决方案 我想我现在可以回答自己的问题,这很简单: import pytest pytest.main(args) 在 args是命令行参数的列表,例如,仅运行特定的测试,我可以使用以下内容: args_str = "-k test_myfavorite" args = args_str.split(" ") pytest.main(args) 其他解决
我突然无法在我的Python程序中设置任何断点.请注意,有两个(Pdb)出现.我想知道PDB之前是否损坏了.在此问题开始发生之前,我确实尝试使用pdb中的abc.so文件中介入一些编译的C ++代码: -> print('haha') (Pdb) (Pdb) Traceback (most recent call last): File "high.py", line 38, in print('haha') File "high.py", line 38, in print('haha') File "/Users/ludaming/anaconda2/lib/python2.7/bdb.py", line 49, in trace_dispatch return self.dispatch_line(frame) File "/Users/ludaming/anaconda2/lib/python2.
我正在使用多线程代码,而PDB不会在手动设置断点上停止: (pdb) b filename:lineno (pdb) c # Runs without stopping 原因是什么? 解决方案 截至2020年9月,Python的PDB调试器不支持多线程. 试图从PDB启动的不同线程上断裂,将跳过断点.这是由于当前实施使用 sys.settrace() 特定于线程的. 有一个 ticket 用于在其他多线程中实现此功能. 当前,唯一的选项是在被调试的同一线程上pdb.set_trace(). 其他解决方案 而不是pdb使用例如web-pdb. https://pypi.org/project/project/web-pdb/
我试图了解__enter__和__exit__在文件上下文管理器中调用方法. with open("test.txt") as fp: fp.read() 我在pdb中尝试了step命令 - 而不是转到函数的定义open,它只是执行它并继续进入下一行. 我也尝试使用sys.settrace(),但即使它也没有捕获函数调用open,__enter__和__exit__在任何事件中. 当然,这适用于从其他模块和同一模块中导入的功能.我假设这应该以类似的方式为这些内置功能起作用.我找不到任何指向这一点的文档.是否可以介入或跟踪内置函数的执行? 使用Python 2.7. 解决方案 尝试使用 sys.sets.sets.sets.setprofile sys.settrace 追踪内置功能时: 系统的配置文件函数与系统的跟踪函数类似(请参阅setTrace()),但是它在不同的事件中被调用,例如,它没有针对每个执行的代码行调用(仅在呼叫和返回,返回,
上下文: 我正在通过PDB(Python调试器)运行一些Python代码.当我设置并随后达到断点时,我可以使用: 检查本地变量 (Pdb) locals() 这打印出了我暂停的当前范围中的局部变量的值对.完美! 我还可以使用PDB where命令看到堆栈跟踪,该命令导致这样的结果: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py(400)run() -> exec cmd in globals, locals (1)() .../main.py(116)() -> run() .../main.py(104)run() -> res = quicksort(res) > .../main.py(68)quicksort() -> if len(v)
要调试我在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 好,那么如何连接到正在运行的PDB?我已经尝试了heroku run nc 3d0c9fdd-c18a-4cc2-8466-da6671a72cbc 4444尝试从Heroku系统内部连接到命名主机,但这只是立即以状态1退出,没有错误消息. 所以我的具体问题是:我现在如何连接到此远程
cpython 3.7引入了在调试器中逐步跨越单个操作码的能力.但是,我不知道如何从字节码堆栈中读取变量. 例如,调试时 def f(a, b, c): return a * b + c f(2, 3, 4) 我想发现加法的输入为6和4. 到目前为止,我只能提出OpCode信息,但我不知道如何获取OpCode Inputs: 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
考虑此多线程程序: 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
所以我正在运行一个python脚本,在其中我通过写作来调用Python的调试器PDB: import ipdb; ipdb.set_trace() (ipython的PDB版本,尽管我认为它没有区别;我仅将其用于彩色输出). 现在,当我进入调试器时,我想执行多行语句,例如if子句或for loop,但一旦我键入 if condition: 按返回键,我得到了错误消息*** SyntaxError: invalid syntax (, line 1) 一个人如何在PDB中执行多行语句?如果可能不可能,将有办法仍然执行if子句或for loop? 解决方案 您可以在PDB中进行此操作,以启动所有可用的本地变量的临时交互式Python会话: (pdb) !import code; code.interact(local=vars()) Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
来自Python文档: sys.excepthook(type, value, traceback) 此功能打印出给定的追溯和异常的sys.stderr. 当异常升高和未被教时,解释器调用sys.excepthook带有三个参数,异常类,异常实例和追溯对象.在交互式会话中,这发生在返回到达提示之前.在Python程序中,这发生在程序退出之前.可以通过为sys.excepthook. 如何在全球修改此操作,以便默认操作始终调用pdb?我可以更改配置文件吗?我不想包装我的代码来执行此操作. 解决方案 这是您需要的 python.html 三种方式,第一种很简单,但粗糙(import pdb, sys, traceback def info(type, value, tb): traceback.print_exception(type, value, tb) pdb.pm() sys.excepthook = info 第二个更复杂,并检查交互式
我有一个.NET解决方案,该解决方案由几个项目组成.可以说这些项目之一是逻辑上的一个主要项目,而其他所有项目都是次要的.我们的团队已决定下一步构建项目.主要项目将产生一个组件(我将其称为主要项目).所有其他项目的组件都是次要的,它们将被嵌入为主要资源. 主项目中的SourceCodeForExceptionHelper类负责在每个遇到的异常上使用PDB文件获取原始源代码.为此,我使用了描述的方法在这里.它在我单独的概念项目证明中正常工作.但是,当我试图将该类移动到真正的解决方案中时,我遇到了一个问题:IMetaDataDispenser.OpenScope方法不需要null引用汇编文件的路径.当然,我没有任何辅助组件的参考(因为它们的文件已嵌入到初级中).因此,我无法创建类型ISymbolReader的对象并读取源代码.我该如何解决这个问题?顺便说一句,问题甚至更糟,因为我们仅嵌入了没有PDB文件的次要组件(尽管有必要,我们会这样做). 事先感谢您的任何帮助和建议! 解
我正在尝试调试我写的python cli,可以从stdin那里获得其论点.一个简单的测试用例将具有 的输出 echo "test" | python mytool.py 等效于 的输出 python mytool.py test 我想调试此工具的一些问题,因此我尝试运行此功能: echo "test" | pdb mytool.py 但是我得到了此输出,然后PDB退出: > /path/to/mytool.py(5)() -> ''' (Pdb) *** NameError: name 'test' is not defined (Pdb) 当我在shebang中添加-m python时,也会发生同样的事情,如果我在脚本内运行pdb.set_trace(). 这里发生了什么? 解决方案 另一个选项是创建您自己的PDB对象,并将其设置为stdin和stdout.我的概念证明涉及2个终端,但是可以肯定的是,可以合并某种非常不安
编辑 不幸的是,目前这是不可能的.我发现这是一个 Spyder中的错误.开发人员为仍在弄清楚如何解决此问题. 目标 在调试代码时可视化数据(我也想使用Spyder!). 尝试#1:从Spyder ipython运行foo.bar 创建一个名为foo.py的文件,并具有以下代码: from ipdb import set_trace as st import matplotlib.pyplot as plt def bar(): st() 在ipython中,键入以下内容: In [4]: import foo In [5]: foo.bar() --Return-- None > somewhere_over_the_rainbow\foo.py(5)bar() 3 4 def bar(): ----> 5 st() ipdb> plt.plot([1, 2], [3, 4]) [
在我们的输出树中,测试目录仅包含指向各种构建目录中DLL的符号链接(Win7 X64).实际构建目录中的每个DLL旁边是一个相应的PDB文件.但是,当在测试目录中的DLL上运行OpenCover时,它以"没有结果 - 没有匹配所提供过滤器的组件是仪器的,这可能是由于匹配过滤器的组件缺少PDB,请查看输出文件并参考输出文件并参考到使用指南(usage.rtf)" 我正在使用的命令行是: D:\tools\opencover.4.5\OpenCover.console -target:d:\tools\nunit-2.5.10\nunit-console.exe -targetargs:"d:\temp\Test\Test.Mixed.dll /nologo /noshadow /labels /xml=d:\temp\Test\output\Test.Mixedatp_results.xml" -output:d:\temp\Test\Results\coverage\Tes
我想在bot@18f71e53b3f5:~/pycoq/tutorial$ python brandos_pycoq_tutorial.py > /home/bot/pycoq/tutorial/brandos_pycoq_tutorial.py(142)() -> main() (Pdb) import logging (Pdb) (Pdb) level = logging.INFO (Pdb) format = ' %(message)s' (Pdb) handlers = [logging.FileHandler('./filename.log'), logging.StreamHandler()] (Pdb) (Pdb) logging.basicConfig(level = level, format = format, handlers = handlers) (Pdb) logging.info('Hey, this is working!') (Pdb)
当我运行Python调试器时,我可以介入我写的功能.但是,如果我尝试像os.mkdir("folder")这样的库函数,则它"跨越"它.有没有办法进入内置库的功能,以查看python在引擎盖下的工作? 理想情况下,可以在pypy中进行此操作,以便您可以继续钻入Python代码. 解决方案 pdb,Python调试器,无法像os.mkdir那样介入C函数,但是gdb可以.尝试以下操作: gdb --args python whatever.py ... 然后: start break posix_mkdir continue 您应该看到它停止在Python的OS.MKDIR实施中,如下所示: https://stackoverflow.com/a/16617835/4323 其他解决方案 os.mkdir()在C代码中实现,pdb无法介入该功能. 您仅限于仅调试纯Python 代码;该代码是否是标准库的一部分都没关系.您可以进入shutil模