随着代码的不断变化,有些target variable
可能在新的版本里不存在了。@defined
用来检查target variable
是否存在。举例如下:
probe vm.pagefault = kernel.function("__handle_mm_fault@mm/memory.c") ?,
kernel.function("handle_mm_fault@mm/memory.c") ?
{
write_access = (@defined($flags) ? $flags & FAULT_FLAG_WRITE : $write_access)
}
上述代码则用来根据flags
是否存在,来赋给write_access
不同的值。
此外还有@choose_defined
:@choose_defined($a, $b)
相当于@defined($a)? $a : $b
。举例如下:
probe vm.pagefault = kernel.function("handle_mm_fault@mm/memory.c")
{
write_access = @choose_defined($write_access, 0)
}