diff options
author | Lukas Larsson <[email protected]> | 2013-08-02 20:23:43 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2013-08-05 10:29:57 +0200 |
commit | 67b37031bbec0cc7eecc0e02670d02b8f1b9092e (patch) | |
tree | 857d4fa08314ebbb8b9811673fcc2ff2129756c0 /erts/etc/unix/etp-thr.py | |
parent | d9f1c1f1bc658d133b9198e4564e419597793cb4 (diff) | |
download | otp-67b37031bbec0cc7eecc0e02670d02b8f1b9092e.tar.gz otp-67b37031bbec0cc7eecc0e02670d02b8f1b9092e.tar.bz2 otp-67b37031bbec0cc7eecc0e02670d02b8f1b9092e.zip |
erts: Create gdb pything script for thread listing
Diffstat (limited to 'erts/etc/unix/etp-thr.py')
-rw-r--r-- | erts/etc/unix/etp-thr.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/erts/etc/unix/etp-thr.py b/erts/etc/unix/etp-thr.py new file mode 100644 index 0000000000..4bfbfa16f3 --- /dev/null +++ b/erts/etc/unix/etp-thr.py @@ -0,0 +1,57 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2013. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +# + +def get_thread_name(t): + if t.name != None: + return t.name; + f = gdb.newest_frame(); + while f: + if f.name() == "async_main": + return "async"; + elif f.name() == "erts_sys_main_thread": + return "main"; + elif f.name() == "signal_dispatcher_thread_func": + return "signal_dispatcher"; + elif f.name() == "sys_msg_dispatcher_func": + return "sys_msg_dispatcher"; + elif f.name() == "child_waiter": + return "child_waiter"; + elif f.name() == "sched_thread_func": + return "scheduler"; + elif f.name() == "aux_thread": + return "aux"; + f = f.older(); + return "unknown"; + + +curr_thread = gdb.selected_thread(); + +for i in gdb.inferiors(): + gdb.write(" Id Thread Name Frame\n"); + for t in i.threads(): + t.switch(); + if curr_thread == t: + gdb.write("*"); + else: + gdb.write(" "); + gdb.write("{0:<3} {1:20} {2}\n".format( + t.num,get_thread_name(t), + gdb.newest_frame().name())); + +curr_thread.switch(); |