Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing hpx gdb script #1860

Merged
merged 1 commit into from Nov 16, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
45 changes: 34 additions & 11 deletions tools/gdb/hpx.py
Expand Up @@ -66,7 +66,7 @@ class _iterator(object):
'''Iterator for Boost.Unordered types'''

def __init__(self, start_node, node_type, value_type, extractor):
assert start_node
#assert start_node
self.node = None
self.next_node = start_node
self.node_type = node_type
Expand Down Expand Up @@ -222,21 +222,22 @@ def __init__(self, thread_data_base):

prev_context = self.context.switch()
frame = gdb.newest_frame()
function_name = frame.function().name
function_name = frame.name()
p = re.compile("^hpx::util::coroutines.*$")

try:
while p.match(function_name):
if frame.older() is None:
break
frame = frame.older()
function_name = frame.function().name
function_name = frame.name()


if not frame.older() is None:
frame = frame.older()
function_name = frame.function().name
line = frame.function().line
function_name = frame.name()

line = frame.function().line
filename = frame.find_sal().symtab.filename

self.pc_string = "0x%x in " % frame.pc() + "%s at " % function_name + "%s:" % filename + "%d" % line
Expand Down Expand Up @@ -272,13 +273,14 @@ def deref_stack(self, addr):
return addr.reinterpret_cast(gdb.lookup_type("std::size_t").pointer()).dereference()

def invoke(self, arg, from_tty):

runtime = gdb.selected_frame().read_var("hpx::runtime::runtime_::ptr_").dereference()#["ptr_"]
#gdb.selected_frame().read_var("hpx::runtime::runtime_")
runtime = gdb.lookup_global_symbol("hpx::runtime::runtime_").value()["ptr_"].dereference()
#gdb.selected_frame().read_var("hpx::runtime::runtime_.ptr_").dereference()#["ptr_"]
thread_manager_ptr = runtime.cast(runtime.dynamic_type)["thread_manager_"]['px']
thread_manager = thread_manager_ptr.cast(thread_manager_ptr.dynamic_type).dereference();

scheduler = thread_manager['scheduler_']
scheduler_type = scheduler.type.target().target()
scheduler = thread_manager['pool_']['sched_']
scheduler_type = scheduler.type.target()#.target()

queues = {}
for f in scheduler_type.fields():
Expand All @@ -291,8 +293,6 @@ def invoke(self, arg, from_tty):

for name in queues:
if name == "queues_":
type = queues[name].type.strip_typedefs()

item = queues[name]['_M_impl']['_M_start']
end = queues[name]['_M_impl']['_M_finish']

Expand All @@ -307,6 +307,29 @@ def invoke(self, arg, from_tty):
print ""
item = item + 1
count = count + 1
if name == "high_priority_queues_":
item = queues[name]['_M_impl']['_M_start']
end = queues[name]['_M_impl']['_M_finish']

count = 0
while not item == end:
print "High Priority Thread queue %d:" % count
thread_map = Set(item.dereference().dereference()['thread_map_'])
for k, v in thread_map:
thread = HPXThread(v['px'])

thread.info()
print ""
item = item + 1
count = count + 1

print "Low priority queue:"
thread_map = Set(queues["low_priority_queue_"]['thread_map_'])
for k, v in thread_map:
thread = HPXThread(v['px'])

thread.info()
print ""

class HPXGdbState():
def __init__(self):
Expand Down