On Sunday, 18 March 2018 15:23:58 BST Jean-Paul Calderone wrote:
>
> Try this:
>
> from twisted.internet.defer import setDebugging
> setDebugging(True)
>
> This gives you creation and callback stacks in the logs.
If you need to track down who put the value into the deferred
you need to patch the defer.py code to log that info.
There are 2 places that a value enters the Deferred.
The first is the callback() call. The other is in
defer.py:653 Deffered._runCallbacks()
653: current.result = callback(current.result, *args,
**kw)
exarkun@baryon:/tmp$ cat deferreddebug.pyfrom twisted.internet.defer import fail, setDebuggingsetDebugging(True)def foo():return fail(Exception("boo"))foo()exarkun@baryon:/tmp$ python deferreddebug.pyUnhandled error in Deferred:(debug: C: Deferred was created:C: File "deferreddebug.py", line 5, in <module>C: foo()C: File "deferreddebug.py", line 4, in fooC: return fail(Exception("boo"))C: File "/home/exarkun/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 106, in failC: d = Deferred()I: First Invoker was:I: File "deferreddebug.py", line 5, in <module>I: foo()I: File "deferreddebug.py", line 4, in fooI: return fail(Exception("boo"))I: File "/home/exarkun/.local/lib/python2.7/site-packages/twisted/internet/defer.py", line 107, in failI: d.errback(result))exarkun@baryon:/tmp$