当我跟踪一个函数时,在函数内部我想在开头用下划线打印那些变量名的值,例如.p __seqLen.它一直显示AttributeError: AttributeError("Converter instance has no attribute '__seqLen'",)我也尝试使用p self.__seqLen.这也行不通.我该如何打印这些值?
我正在使用openssl,在构建期间我收到了很多关于缺少libeay.pdb的警告.有人可以建议如何添加它吗?
build.cmd看起来像这样(我认为重要的部分):
...
perl util\mk1mf.pl debug dll no-asm VC-WIN64A >ms\ntdll64.dbg.mak
perl util\mkdef.pl 32 libeay > ms\libeay32.def
nmake -f ms/nt64.dbg.mak
Run Code Online (Sandbox Code Playgroud)
我读了INSTALL.W32,上面写着"如果你使用平台debug-VC-WIN32而不是VC-WIN32,那么将编译调试符号." 我试图用debug-WIN64A替换VC-WIN64A(与32相同),并且构建给了我一个错误
Unknown option --debug-VC-WIN64A
Run Code Online (Sandbox Code Playgroud)
谢谢.
编辑:当我在mak之后添加/ DEBUG
再次编辑时它起作用:/ DEBUG不是必需的,命令中的调试字完成了工作.
如何使用Visual Studio构建它?
使用Sublime Text 2调试Python Web服务器(我有Plone/Zope)的推荐方法是什么?
在文本编辑器中设置真正的断点......
...最好通过行上下文敏感命令,并在文本编辑器边缘有一个标记...
...然后有一个正在运行的Python Web服务器(本地进程)立即兑现断点而不重启...
...当点击断点打开终端或其他窗口中的调试提示时,可以是pdb
目标是断点不是硬import pdb ; pdb.set_trace()样式断点,因为您需要重新启动软件以跳过此类断点,并且无法启用/禁用它运行时.
平台:OSX.
我在virtualenv中使用Flask 0.9和Python 2.7.1,然后启动我的应用程序 foreman start
在我将以下行添加到我的应用程序时构建的其他应用程序中:
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
然后重新加载浏览器窗口,我的终端窗口显示pdb交互式调试器:
(pdb)
Run Code Online (Sandbox Code Playgroud)
但是在我的应用程序中添加这些行时没有任何反应.浏览器窗口挂起并显示一个恒定的加载状态,但控制台中没有显示任何内容.
是否需要发生一些魔术?
对于一些快速的Python调试,我偶尔会抛出import pdb;pdb.set_trace()一行会让我进入调试器.非常便利.但是,如果我想调试一个可能运行很多次的循环,它会在一定程度上失去它的效果.我可以在c很多很多次上进行混合,但有没有办法删除/忽略那个硬编码的断点,这样我就可以完成它了?
我可以设置一个全局标志并有条件地运行它,但是我会丢失单行断点的'standalone-ness',也需要另一个标志pdb.set_trace().
在pdb / ipdb调试中,有用的interact命令为我提供了功能齐全的交互式Python控制台。
但是,即使我一ipdb开始使用,它似乎始终是“标准” Python控制台。有没有一种配置ipdb的方法,interact它将为我提供IPython控制台,而不是标准的Python?有趣的是,我确实收到了IPython样式提示,但是却没有使用IPython魔术,例如%whos:
In [24]: 1/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-24-05c9758a9c21> in <module>()
----> 1 1/0
ZeroDivisionError: division by zero
In [25]: %debug
> <ipython-input-24-05c9758a9c21>(1)<module>()
----> 1 1/0
ipdb> interact
*interactive*
In : %whos
File "<console>", line 1
%whos
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
有没有办法让ipdb小号interact给我的全功能IPython控制台?
在python pdb中,我在代码中设置了一个断点并运行我的文件.它像往常一样进入调试模式.我想打印地图调用的输出.因此我在pdb中输入以下内容:
(Pdb) p inp, pos
('abcde', [0, 1, 2])
(Pdb) map(lambda x: inp[x], pos)
*** NameError: global name 'inp' is not defined
(Pdb)
Run Code Online (Sandbox Code Playgroud)
我不明白这里的NameError异常...在pdb中进行地图调用的正确方法是什么?
更新:
这是一个输出,可以帮助您重现问题:
$ cat reproduce.py
from itertools import combinations
def comb(seq, r):
n = len(seq)
m = range(n)
vectors = list(combinations(m, r))
result = []
for v in vectors:
result.append(
map(lambda x: seq[x], v)
)
return result
if __name__ == '__main__':
r = comb('abcde', 3)
import pprint as pp ; pp.pprint(r)
$ python -m pdb …Run Code Online (Sandbox Code Playgroud) PDB新手.在Emacs中运行PDB.Python 2.7.12.
以下说明来自:如何在Python PDB中显示线程/进程ID?
(pdb) import os,threading; os.getpid(), threading.current_thread().ident
Run Code Online (Sandbox Code Playgroud)
我跑了:
(Pdb) p threading._active
{140313408587520: <_MainThread(MainThread, started 140313408587520)>,
140313368295168: <Thread(Thread-2, started 140313368295168)>,
140313359574784: <Thread(Thread-1, started 140313359574784)>}
Run Code Online (Sandbox Code Playgroud)
现在,我如何在线程之间切换(在PDB中)?
我无法理解此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, (0, 1)), (0.5, (0, …Run Code Online (Sandbox Code Playgroud) 我花了很多东西在MacOS Sierra上的pdb中启用了readline支持的子进程,我不明白为什么它失败了,因此问题.
请注意,我有适当的ReadLine支持无需添加.pdbrc在我所有的Python environemnts,包括python2和3个设施也符合pipenv,VENV,或皮尤创建的虚拟环境中的文件.一切正常.
当我想在子进程中放入pdb shell时出现问题.我使用nodejs 程序和一个插件,我用它在本地调用AWS代码.第一个nodejs进程启动第二个,第二个进程启动一个python进程,我有我常用的pdb代码:
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
但是我得到的pdb shell没有readline支持.我尝试了以下替代方案,但效果不佳:
import ipdb; ipdb.set_trace()
import rlcompleter, readline
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('bind ^I rl_complete')
Run Code Online (Sandbox Code Playgroud)
我还添加.pdbrc了以上内容(减去ipdb导入)的文件无济于事.我还尝试将PYTHONSTARTUP点设置为具有以下内容的文件:
import rlcompleter, readline
readline.parse_and_bind('tab: complete')
Run Code Online (Sandbox Code Playgroud)
它也没有帮助.人们已经报告说这些解决方案对他们有用,但他们没有开始的readline支持(对我来说,没有这些技巧它可以正常工作).
我也尝试修补我的nodejs process.env.PATH并process.env.PYTHONPATH添加了我有python安装的目录,其中有readline支持无济于事.
我很感激,如果有人能够解释从子子程序启动pdb和直接从终端启动pdb之间是否存在根本区别(在任何情况下它都是子进程).此外,我感谢任何可能帮助我解决这个问题的建议.
我注意到即使没有pdb我也没有获得readline支持:
import code
code.interact(local=locals())
Run Code Online (Sandbox Code Playgroud)
如果我运行上面的代码,我得到一个没有readline支持的python shell:
Python 3.7.0 (default, Jun 29 2018, 20:13:13)
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
<pointer blinks here which is …Run Code Online (Sandbox Code Playgroud)