diff options
author | Luuk van Dijk <lvd@golang.org> | 2011-03-28 17:34:22 +0200 |
---|---|---|
committer | Luuk van Dijk <lvd@golang.org> | 2011-03-28 17:34:22 +0200 |
commit | 43512e6c7007b3cca7b693064e0f1da8e47e154f (patch) | |
tree | 5598aca5d83612f225fbed66419c6466c3f8bea0 | |
parent | 6b3357129aacd4df1b03772f0d48fa0e46c2407c (diff) | |
download | go-43512e6c7007b3cca7b693064e0f1da8e47e154f.tar.gz go-43512e6c7007b3cca7b693064e0f1da8e47e154f.zip |
runtime: fix gdb support for goroutines.
in gdb, 'info goroutines' and 'goroutine <n> <cmd> were crashing
because the 'g' and 'm' structures had changed a bit.
R=rsc
CC=golang-dev
https://golang.org/cl/4289077
-rw-r--r-- | src/pkg/runtime/runtime-gdb.py | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/pkg/runtime/runtime-gdb.py b/src/pkg/runtime/runtime-gdb.py index 68dd8abdc6..08772a431e 100644 --- a/src/pkg/runtime/runtime-gdb.py +++ b/src/pkg/runtime/runtime-gdb.py @@ -215,6 +215,8 @@ class IfacePrinter: return 'string' def to_string(self): + if self.val['data'] == 0: + return 0x0 try: dtype = iface_dtype(self.val) except: @@ -308,15 +310,11 @@ class GoroutinesCmd(gdb.Command): for ptr in linked_list(gdb.parse_and_eval("'runtime.allg'"), 'alllink'): if ptr['status'] == 6: # 'gdead' continue - m = ptr['m'] s = ' ' - if m: - pc = m['sched']['pc'].cast(vp) - sp = m['sched']['sp'].cast(vp) + if ptr['m']: s = '*' - else: - pc = ptr['sched']['pc'].cast(vp) - sp = ptr['sched']['sp'].cast(vp) + pc = ptr['sched']['pc'].cast(vp) + sp = ptr['sched']['sp'].cast(vp) blk = gdb.block_for_pc(long((pc))) print s, ptr['goid'], "%8s" % sts[long((ptr['status']))], blk.function @@ -326,7 +324,7 @@ def find_goroutine(goid): if ptr['status'] == 6: # 'gdead' continue if ptr['goid'] == goid: - return [(ptr['m'] or ptr)['sched'][x].cast(vp) for x in 'pc', 'sp'] + return [ptr['sched'][x].cast(vp) for x in 'pc', 'sp'] return None, None |