2014-04-04 127 views
0

在下面的堆棧跟蹤中,我錯過了上部幀。異常回溯:上部幀丟失

誰在ioloop.py行458中調用了callback()?

stacktrace來自unittest TestCase。所有的測試都通過了,但是這個回溯在日誌中是可重複的。

我看不到TestCase在哪個測試中引發異常。

ERROR [25950] Exception in callback <functools.partial object at 0x5358368> 
Traceback (most recent call last): 
    File "/home/modwork_foo_dtg/lib/python2.7/site-packages/tornado/ioloop.py", line 458, in _run_callback 
    callback() 
    File "/home/modwork_foo_dtg/lib/python2.7/site-packages/tornado/stack_context.py", line 331, in wrapped 
    raise_exc_info(exc) 
    File "/home/modwork_foo_dtg/lib/python2.7/site-packages/tornado/stack_context.py", line 302, in wrapped 
    ret = fn(*args, **kwargs) 
    File "/home/modwork_foo_dtg/src/websocketrpc/websocketrpc/client.py", line 71, in connect 
    self.ws = websocket_connect(self.args.url) 
    File "/home/modwork_foo_dtg/src/websocketrpc/websocketrpc/client.py", line 179, in websocket_connect 
    conn = websocket.WebSocketClientConnection(io_loop, request) 
    File "/home/modwork_foo_dtg/lib/python2.7/site-packages/tornado/websocket.py", line 777, in __init__ 
    raise Exception('%s %s' % (request, request.url)) 
Exception: <tornado.httpclient._RequestProxy object at 0x535cb10> None 

我該如何使用龍捲風查看上層堆棧跟蹤幀?

異常本身不是問題。

+0

不錯的博客解釋爲什麼上面的幀丟失:http://blog.dscpl.com.au/2015/03/generating-full-stack-traces-for.html – guettli

回答

0

回調由ioloop.py:458調用,就像它說的那樣。沒有顯示外部堆棧幀,因爲異常沒有轉義該幀。讓你感到困惑的是回調繼續重新引發之前捕獲的異常。

在Python 2中,保留追溯以後重新加載很麻煩(它在Python 3中變得更好)。龍捲風通常在這裏做正確的事情,但是有一些差距在回溯將被截斷。我在當前版本中知道的主要問題是AsyncHTTPClient傾向於丟棄回溯(並且在解決此問題時存在一些煩人的向後兼容性問題)。

作爲調試時的一個粗略的解決方法,您可以在引發異常之前嘗試打印traceback.format_stack(至少在可以修改代碼的位置,正如您在此處爲websocket.py添加異常所做的那樣)。