我正在使用我的 Django 应用程序。由于某种原因,列表的元素被错误地分配。
我正在尝试在我认为发生错误的地方设置一个中断。(第 20 行)
我用这行代码调用 pdb :
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
但是,在代码内部,我似乎无法设置 Break。
(Pdb) b 20
*** Blank or comment
(Pdb) break 20
*** Blank or comment `
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
在pdb控制台时,输入导致异常的语句只会导致单个行堆栈跟踪,例如
(Pdb) someFunc()
*** TypeError: __init__() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
但是,我想弄清楚someFunc错误的确切位置.即在这种情况下,__init__附加哪个类.
有没有办法在Pdb中获得完整的堆栈跟踪?
我刚刚将所有单元测试数据从 JSON 转换为 YAML,现在我的代码中出现了异常。更具体地说,这是打印回溯:
回溯(最近一次调用最后一次):
文件“tests/test_addrtools.py”,第 95 行,在 test_validate_correctable_addresses 中
self.assertTrue(self.validator(addr), msg)
文件“/Users/tomas/Dropbox/Broadnet/broadpy/lib/broadpy/addrtools.py”,第 608 行,在 __call__ 中
自我验证(地址)
文件“/Users/tomas/Dropbox/Broadnet/broadpy/lib/broadpy/addrtools.py”,第 692 行,在验证中
if self._correction_citytypo(addr): 返回
文件“/Users/tomas/Dropbox/Broadnet/broadpy/lib/broadpy/addrtools.py”,第 943 行,在 _correction_citytypo
比率 = lev_ratio(old_city, city)
类型错误:比率预期为两个字符串或两个 Unicode
现在,第 943 行的文件“addrtools.py”包含了我的问题的答案。我想看到的类型和价值old_city,并city在其中引发异常的范围。我一直都有这种问题,并且使用一种快速而轻松的方法pdb来检查引发异常的范围内的本地人,将来会为我节省大量时间。
我确实尝试了在这个问题的答案中发布的解决方案,但是验尸函数将我置于python2.7/unittest/main.py(231)runTests() 中,这对我没有很大帮助。我想这是因为从单元测试代码中捕获并重新引发了异常。
我正在测试一个修复程序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
Run Code Online (Sandbox Code Playgroud)
所以我搬到了我的本地机器,以确保在寻求帮助之前尽可能简单地复制.在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-packages/IPython/core/displayhook.py(237)__call__()
-> def __call__(self, result=None):
(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
Run Code Online (Sandbox Code Playgroud)
但在正常的命令行,它工作得很好:
tristan:~$ python
Python 2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)] on …Run Code Online (Sandbox Code Playgroud) 假设我有一个引发意外异常的函数,所以我将它包装在ipdb中:
def boom(x, y):
try:
x / y
except Exception as e:
import ipdb; ipdb.set_trace()
def main():
x = 2
y = 0
boom(x, y)
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我可以向上移动堆栈以找出x和y具有的值:
$ python crash.py
> /tmp/crash.py(6)boom()
5 except Exception as e:
----> 6 import ipdb; ipdb.set_trace()
7
ipdb> u
> /tmp/crash.py(11)main()
10 y = 0
---> 11 boom(x, y)
12
ipdb> p y
0
Run Code Online (Sandbox Code Playgroud)
但是,在调试时,我想把调试器放在最顶层:
def boom(x, y):
x / y
def main():
x = 2
y = 0
boom(x, …Run Code Online (Sandbox Code Playgroud) 我想使用ipdb而不是pdb与py.test --pdb选项.这可能吗?如果是这样,怎么样?
显然,我可以import ipdb; ipdb.set_trace()在代码中使用,但需要运行测试,观察它失败,打开文件,找到所述文件中的失败点,写上面的行,重新运行测试.如果我可以通过所有这些来获得一些东西,那会很麻烦.
我使用apollocaffe和复检。Apollocaffe 在 c++ 库中,Reinspect 在 python 中。重新检查来自 apollocaffe 的调用 apis。我喜欢在 apollocaffe 中调试那些 api。从 python 代码,我用
python -m pdb train.py
Run Code Online (Sandbox Code Playgroud)
但是我不能从 apollocaffe 进入 api。我喜欢cout << "test" << endl; in apollocaffe。但是没有任何内容打印到控制台。我如何调试c++代码,至少如果我可以打印,它会很棒。
我正在编写一个 python 包,我想使用 pdb 来调试它。当我尝试在其中一个文件中设置断点时,出现错误:
The specified object 'CaptureManager.frame' is not a function or was not found along sys.path
Run Code Online (Sandbox Code Playgroud)
我google了一下,找到了解决办法:
将包含我的文件的目录附加到 sys.path
sys.path.append(os.path.join(os.getcwd(),"project_cameo"))
Run Code Online (Sandbox Code Playgroud)
但是几次之后,我变得非常恼火,因为每次重新启动调试会话时我都必须这样做。有没有一种“聪明”的方法来做到这一点?
在我的 Django 应用程序中,如果我pdb在代码的任何地方使用 debugger( ),它会抛出这个错误并且应用程序会突然关闭。
任何解决此问题的线索将不胜感激。
-> roc_score = metrics.roc_auc_score(y_a, y_p)
(Pdb) 2018-03-15 09:31:46.205 Python[71934:1568993] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'nextEventMatchingMask should only be called from the Main Thread!'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff90e9757b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fffa60fa1da objc_exception_throw + 48
2 AppKit 0x00007fff8f082e82 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 4480
3 _macosx.cpython-36m-darwin.so 0x000000010c9f9baf wait_for_stdin + 479
4 readline.cpython-36m-darwin.so 0x0000000104cfc2d2 call_readline + 359
5 Python 0x000000010487daef PyOS_Readline + 180
6 Python …Run Code Online (Sandbox Code Playgroud) 与Python Multiprocessing相关的错误:AttributeError: module '__main__' has no attribute '__spec__',但由不同情况引起。
当我尝试使用 pdb 运行多处理代码时,我在 Python 3.7.4 中遇到了一个问题。该问题与https://docs.python.org/3.6/library/multiprocessing.html 中的基本多处理示例相同:
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(f, [1, 2, 3]))
Run Code Online (Sandbox Code Playgroud)
这个运行正常(输出[1, 4, 9]时在Python经由直接运行)python.exe testcase.py。但是,它在 pdb 下不起作用;python.exe -m pdb testcase.py失败并出现错误:
Traceback (most recent call last):
File "c:\python37\lib\pdb.py", line 1697, in main
pdb._runscript(mainpyfile)
File "c:\python37\lib\pdb.py", line 1566, in _runscript
self.run(statement)
File "c:\python37\lib\bdb.py", line 585, in …Run Code Online (Sandbox Code Playgroud)