By Chris Quenelle on Jun 01, 2007
\^H\^H\^H\^H\^H\^Hjanitor's quick intro to Runtime Checking ).
A kind soul tried my libumem dbx module and ran into some problems. It turns out he was running on Solaris 9, and I hadn't ever tried it on Solaris 9 before (my desktop machine is Solaris Nevada). So I gave it a spin, and ran into the same kind of failure that he did. The short story is I made some bug fixes, and it now works fine and dandy on Solaris 9 and 10. Of course, this is still a "copious spare time" project. So it hasn't been very heavily tested yet.
dbx: warning: unknown language, 'c' assumed dbx: "umem_transaction_log" is not defined in the scope `libc.so.1`_kill`
It turns out that one symbol changed names during the backport of libumem to Solaris 9. umem_max_ncpus is called max_ncpus on Solaris 9. Also, for some reason, dbx is a little schizophrenic about looking up symbols sometimes. On Solaris 9, dbx thinks the global variables are file static I need to use the fully qualified scope, `libumem.so.1`umem.c`umem_transaction_log instead of just umem_transaction_log. Luckily I don't need to hard code the source file name. I can use the dbx which command to find the symbol, but dbx still requires me to use the scoped name to print it.
(dbx) print umem_transaction_log dbx: "umem_transaction_log" is not defined in the scope `a.out`t.c`main` (dbx) whereis umem_transaction_log variable: `libumem.so.1`umem.c`umem_transaction_log (dbx) print `libumem.so.1`umem.c`umem_transaction_log `libumem.so.1`umem.c`umem_transaction_log = 163848
But that only seems to be necessary on Solaris 9.
Thankfully, you don't have to worry about any of that. Just download the latest version and give it a try.