Hello all,

I'm debugging the 5d6c770eb29ae0a33 
<https://github.com/bstarynk/monimelt/commit/5d6c770eb29ae0a33a38bd03bc6248df6eff8ded>
 
commit of my monimelt <https://github.com/bstarynk/monimelt> program on 
github.
I don't understand very well how init functions work (and I probably don't 
understand the order in which init functions are running, notably with init 
functions in several files of the same package).

I'm declaring in file 
<https://github.com/bstarynk/monimelt/blob/master/src/objvalmo/objvalmo.go#L895>
objvalmo/objvalmo.go 
<https://github.com/bstarynk/monimelt/blob/master/src/objvalmo/objvalmo.go#L895>
 
the following package private variables:

var glovar_map map[string]**ObjectMo
var glovar_regexp *regexp.Regexp
var glovar_mtx sync.Mutex




   

And the init function is supposed to initialize them:
const glovar_regexp_str = `^[a-zA-Z_][a-zA-Z0-9_]*$`

func init() {
    glovar_map = make(map[string]**ObjectMo)
    glovar_regexp = regexp.MustCompile(glovar_regexp_str)
}

 


For some reason (probably my misunderstanding or bug), the glovar_map 
variable is not initialized like I want it to be. BTW, it is filled in 
RegisterGlobalVariable function 
<https://github.com/bstarynk/monimelt/blob/master/src/objvalmo/objvalmo.go#L906>
 
(same file).
And that function gets called in the init function of file globals.go 
<https://github.com/bstarynk/monimelt/blob/master/src/objvalmo/globals.go#L9> 
of the same package.

So I wanted to use a GDB watchpoint on that glovar_map. Sadly, the ELF name 
of that variable is objjvalmo.glovar_map with some internal dot in the name:

~/monimelt % nm bin/monimelt|grep glovar          
000000000097a7f8 b objvalmo.glovar_map
00000000009990e8 b objvalmo.glovar_mtx
000000000097a800 b objvalmo.glovar_regexp


and of course when I type watch objvalmo.glovar_map in gdb it does not know 
that variable (because gdb is interpreting the dot as a field separator).

Any tricks for GDB to avoid this confusion? If you need to reproduce my bug 
run bin/monimelt -tiny-dump1 /tmp/foo inside the gdb debugger (in the 
directory <https://github.com/bstarynk/monimelt> containing README.md). 

FWIW, my Go is 1.8 on Linux/Debian/Sid/x86-64, I'm building with gb, and gdb 
is 7.12 and is reading the /usr/local/go/src/runtime/runtime-gdb.py script.

(I would wish that Go would mangle names with a dollar, not a dot)

Cheers.

-- 
Basile Staynkevitch <http://starynkevitch.net/Basile/>, France ; email: 
bas...@starynkevitch.net


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to