SystemTapのprobeにおける"!"とは何か?
SystemTapのtapsetのソースコードを読んでいると、以下のような記述が出てくる。
# systemtap/tapset/linux/x86_64/sysc_mmap.stp probe syscall.mmap = dw_syscall.mmap !, nd_syscall.mmap ? {}
このびっくりマークというかexclamation markは、"probe pointが見つかったらそこで評価しろ"の意味。 IBMのRedbook(http://www.redbooks.ibm.com/redpapers/pdfs/redp4469.pdf)にわかりやすい例が載っていたので、引用しておく。
# SystemTap: Instrumenting the Linux Kernel for Analyzing Performance and Functional Problems # P16より kernel.function(“this_might_exist”) !, kernel.function(“if_not_then_this_should”) !, kernel.function(“if_all_else_fails”) { ... }
この例では、kernel.function(“this_might_exits”)があれば、そこで{…}を評価する。 なければ、kernel.function(“if_not_then_this_should”)を探し、存在すれば{…}を評価する。 どちらもなければ、kernel.function(“if_all_else_fails”)を探す。
この例、SystemTap開発元のLanguage Referenceに載っていないのでつらい。