Skip to content

Instantly share code, notes, and snippets.

@stephen-soltesz
Created January 29, 2016 01:49
Show Gist options
  • Save stephen-soltesz/45116d5f775bdbc8067a to your computer and use it in GitHub Desktop.
Save stephen-soltesz/45116d5f775bdbc8067a to your computer and use it in GitHub Desktop.
bash-4.1# gdb python
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
...
[snip]
...
Reading symbols from /usr/bin/python...Reading symbols from /usr/lib/debug/usr/bin/python2.6.debug...done.
done.
(gdb) attach 12168
Attaching to program: /usr/bin/python, process 12168
Reading symbols from /usr/lib/libpython2.6.so.1.0...Reading symbols from /usr/lib/debug/usr/lib/libpython2.6.so.1.0.debug...done.
done.
...
[snip]
...
(gdb) info threads
3 Thread 0xb7574b70 (LWP 12171) 0x00b3f424 in __kernel_vsyscall ()
* 2 Thread 0xb69ffb70 (LWP 23478) 0x00e15c82 in PyEval_EvalFrameEx (f=
Frame 0xb5e01424, for file /home/iupui_npad/build/DiagServer.py, line 341, in handle (self=<DiagRequestHandler(wfile=<_fileobject at remote 0x81790ec>, request=<_socketobject at remote 0x8175e64>, server=<DiagServer(RequestHandlerClass=<classobj at remote 0x817b0ec>, server_address=('::', 8001, 0, 0), _BaseServer__shutdown_request=False, _BaseServer__is_shut_down=<_Event(_Verbose__verbose=False, _Event__flag=False, _Event__cond=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xb770d360>, acquire=<built-in method acquire of thread.lock object at remote 0xb770d360>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xb770d360>) at remote 0x817aa6c>) at remote 0x817aa8c>, socket=<_socketobject at remote 0x8175e2c>) at remote 0x817aaac>, connection=<...>, rfile=<_fileobject at remote 0x81795ec>, client_address=('::ffff:113.240.250.155', 64839, 0, 0)) at remote 0x817adcc>, xargs=[], handshake=False, line='\r\n', cmd=[]), throwflag=0) at Python/ceval.c:2156
1 Thread 0xb771c6c0 (LWP 12168) 0x00b3f424 in __kernel_vsyscall ()
(gdb) thread apply all py-list
Thread 3 (Thread 0xb7574b70 (LWP 12171)):
386
387
388 # Kill off misbehaving tests
389 def watchdog(serv):
390 while True:
>391 time.sleep(WATCHDOG_TIME/5)
392 serv.test_list_cv.acquire()
393 try:
394 if len(serv.test_list) > 0:
395 test = serv.test_list[0]
396 if test.kill_test != None and time.time() - test.test_start_time > WATCHDOG_TIME:
Thread 2 (Thread 0xb69ffb70 (LWP 23478)):
336 xargs=[]
337 try:
338 stats.requests += 1
339 handshake = False
340 line = self.rfile.readline()
>341 while line != "":
342 cmd = line.split()
343 if len(cmd) < 1:
344 continue
345
346 if not handshake:
Thread 1 (Thread 0xb771c6c0 (LWP 12168)):
150
151 def _eintr_retry(func, *args):
152 """restart a system call interrupted by EINTR"""
153 while True:
154 try:
>155 return func(*args)
156 except (OSError, select.error) as e:
157 if e.args[0] != errno.EINTR:
158 raise
159
160 class BaseServer:
(gdb) thread 2
[Switching to thread 2 (Thread 0xb69ffb70 (LWP 23478))]#0 0x00e15c82 in PyEval_EvalFrameEx (f=
Frame 0xb5e01424, for file /home/iupui_npad/build/DiagServer.py, line 341, in handle (self=<DiagRequestHandler(wfile=<_fileobject at remote 0x81790ec>, request=<_socketobject at remote 0x8175e64>, server=<DiagServer(RequestHandlerClass=<classobj at remote 0x817b0ec>, server_address=('::', 8001, 0, 0), _BaseServer__shutdown_request=False, _BaseServer__is_shut_down=<_Event(_Verbose__verbose=False, _Event__flag=False, _Event__cond=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xb770d360>, acquire=<built-in method acquire of thread.lock object at remote 0xb770d360>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xb770d360>) at remote 0x817aa6c>) at remote 0x817aa8c>, socket=<_socketobject at remote 0x8175e2c>) at remote 0x817aaac>, connection=<...>, rfile=<_fileobject at remote 0x81795ec>, client_address=('::ffff:113.240.250.155', 64839, 0, 0)) at remote 0x817adcc>, xargs=[], handshake=False, line='\r\n', cmd=[]), throwflag=0) at Python/ceval.c:2156
2156 Py_DECREF(v);
(gdb) py-bt
...
[snip]
...
(gdb) py-locals
self = <DiagRequestHandler(wfile=<_fileobject at remote 0x81790ec>, request=<_socketobject at remote 0x8175e64>, server=<DiagServer(RequestHandlerClass=<classobj at remote 0x817b0ec>, server_address=('::', 8001, 0, 0), _BaseServer__shutdown_request=False, _BaseServer__is_shut_down=<_Event(_Verbose__verbose=False, _Event__flag=False, _Event__cond=<_Condition(_Verbose__verbose=False, _Condition__lock=<thread.lock at remote 0xb770d360>, acquire=<built-in method acquire of thread.lock object at remote 0xb770d360>, _Condition__waiters=[], release=<built-in method release of thread.lock object at remote 0xb770d360>) at remote 0x817aa6c>) at remote 0x817aa8c>, socket=<_socketobject at remote 0x8175e2c>) at remote 0x817aaac>, connection=<...>, rfile=<_fileobject at remote 0x81795ec>, client_address=('::ffff:113.240.250.155', 64839, 0, 0)) at remote 0x817adcc>
xargs = []
handshake = False
line = '\r\n'
cmd = []
(gdb)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment