Skip to content

Commit

Permalink
erts: Create gdb pything script for thread listing
Browse files Browse the repository at this point in the history
  • Loading branch information
garazdawi committed Aug 5, 2013
1 parent d9f1c1f commit 67b3703
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 1 deletion.
1 change: 1 addition & 0 deletions erts/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

/etc/common/Install
/etc/common/erl.src
/etc/unix/etp-commands

/test/Emakefile
/test/*.beam
Expand Down
3 changes: 2 additions & 1 deletion erts/etc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@
#
include $(ERL_TOP)/make/target.mk


SUB_DIRECTORIES = common
ifeq ($(TARGET),win32)
SUB_DIRECTORIES += win32
else
SUB_DIRECTORIES += unix
endif

include $(ERL_TOP)/make/otp_subdir.mk
46 changes: 46 additions & 0 deletions erts/etc/unix/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#
# %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%
#

include $(ERL_TOP)/make/output.mk
include $(ERL_TOP)/make/target.mk

include $(ERL_TOP)/make/$(TARGET)/otp.mk
include ../../vsn.mk

opt debug: etc

.PHONY: etc
etc: etp-commands

etp-commands: etp-commands.in
sed 's:@ERL_TOP@:${ERL_TOP}:g' etp-commands.in > etp-commands

.PHONY: docs
docs:

.PHONY: clean
clean:

# ----------------------------------------------------
# Release Target
# ----------------------------------------------------
include $(ERL_TOP)/make/otp_release_targets.mk

.PHONY: release_spec
release_spec: etc
4 changes: 4 additions & 0 deletions erts/etc/unix/etp-commands → erts/etc/unix/etp-commands.in
Original file line number Diff line number Diff line change
Expand Up @@ -2757,6 +2757,10 @@ document etp-run
%---------------------------------------------------------------------------
end

define etp-thr
source @ERL_TOP@/erts/etc/unix/etp-thr.py
end

############################################################################
# Toolbox parameter handling
#
Expand Down
57 changes: 57 additions & 0 deletions erts/etc/unix/etp-thr.py
Original file line number Diff line number Diff line change
@@ -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();

0 comments on commit 67b3703

Please sign in to comment.