mirror of
https://github.com/kawasaki/pyscrlink.git
synced 2025-09-08 18:50:19 +02:00
scratch_link.py: Print stack trace of all threads at KeyboardInterrupt
To debug the dead lock status, print stack trace of all threads when scratch_link.py stops by key interrupt. Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
This commit is contained in:
@@ -12,6 +12,8 @@ import json
|
|||||||
import base64
|
import base64
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
|
import signal
|
||||||
|
import traceback
|
||||||
|
|
||||||
# for Bluetooth (e.g. Lego EV3)
|
# for Bluetooth (e.g. Lego EV3)
|
||||||
import bluetooth
|
import bluetooth
|
||||||
@@ -608,11 +610,28 @@ start_server = websockets.serve(
|
|||||||
ws_handler, "device-manager.scratch.mit.edu", 20110, ssl=ssl_context
|
ws_handler, "device-manager.scratch.mit.edu", 20110, ssl=ssl_context
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def stack_trace():
|
||||||
|
print("in stack_trace")
|
||||||
|
code = []
|
||||||
|
for threadId, stack in sys._current_frames().items():
|
||||||
|
code.append("\n# ThreadID: %s" % threadId)
|
||||||
|
for filename, lineno, name, line in traceback.extract_stack(stack):
|
||||||
|
code.append('File: "%s", line %d, in %s' % (filename,
|
||||||
|
lineno, name))
|
||||||
|
if line:
|
||||||
|
code.append(" %s" % (line.strip()))
|
||||||
|
|
||||||
|
for line in code:
|
||||||
|
print(line)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
asyncio.get_event_loop().run_until_complete(start_server)
|
asyncio.get_event_loop().run_until_complete(start_server)
|
||||||
logger.info("Started scratch-link")
|
logger.info("Started scratch-link")
|
||||||
asyncio.get_event_loop().run_forever()
|
asyncio.get_event_loop().run_forever()
|
||||||
|
except KeyboardInterrupt as e:
|
||||||
|
stack_trace()
|
||||||
|
break
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.info("Restarting scratch-link...")
|
logger.info("Restarting scratch-link...")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user