libuutil and designing for debuggability, from Stephen Hahn’s blog, advices from zmx.

大意是說 Stephen 他們在 Solaris 10 上, 預期會有 multithreaded, present large, complicated images for postmortem debugging 的 daemons, 所以寫下三個 requirements:

  1. include Compact C Type Format (CTF) information with each daemon
  2. use libumem(3LIB) for memory allocation
  3. use standard, debuggable, MT-safe implementations of data structures

但是目前 Solaris 沒有這樣的 data structure, 所以他們開始設計 libuutil (userland utility functions). 讓 modular debugger — mdb (The typical debugger for kernel work in Solaris), 能夠用到這些 debug information.

例如, 任何 link 到 libuutil 的程式, 可以用 mdb 來 attach:

# mdb -p `pgrep -z global startd`
Loading modules: [ svc.startd ld.so.1 libumem.so.1 libnvpair.so.1 libsysevent.so.1 libuutil.so.1 libc.so.1 ]
> ::uu_list_pool
ADDR NAME COMPARE FLAGS
080dcf08 wait_info 00000000 D
080dce08 SUNW,libscf_datael 00000000 D
080dcd08 SUNW,libscf_iter 00000000 D
080dcc08 SUNW,libscf_transaction_entity c2b0476c D
080dc808 dict 0805749c D
080dc908 timeouts 0806ffab D
080dca08 restarter_protocol_events 00000000 D
080dcb08 restarter_instances 0806ccd7 D
080dc708 restarter_instance_queue 00000000 D
080dc608 contract_list 00000000 D
080dc508 graph_protocol_events 00000000 D
080dc408 graph_edges 00000000 D
080dc308 graph_vertices 08059844 D
>

我是不是要試試看在 Solaris 下開發程式了呢? :p

Popularity: 13% [?]