diff options
author | Lukas Larsson <[email protected]> | 2013-08-08 10:29:59 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2013-08-08 10:29:59 +0200 |
commit | c50a04674fcd461bf6ebdea1f7007e53da47a692 (patch) | |
tree | 7829fdb70d63d1388fb2c9727ddfbaa4d4fd5768 /erts/etc/unix/etp-thr.py | |
parent | f5830abe5e91d5f93459f44c4403a4a0f640f38d (diff) | |
parent | a6aa88ad46774115c5affad7786b7bcc79c55103 (diff) | |
download | otp-c50a04674fcd461bf6ebdea1f7007e53da47a692.tar.gz otp-c50a04674fcd461bf6ebdea1f7007e53da47a692.tar.bz2 otp-c50a04674fcd461bf6ebdea1f7007e53da47a692.zip |
Merge branch 'maint'
* maint:
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(); |