From f7fe094b296f099f81f662e10a4fcac3bc4438f6 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Sun, 1 May 2016 12:54:51 +0200 Subject: [PATCH] lua: Implement "Hello world" USDT example --- examples/lua/usdt_ruby.lua | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 examples/lua/usdt_ruby.lua diff --git a/examples/lua/usdt_ruby.lua b/examples/lua/usdt_ruby.lua new file mode 100755 index 0000000..9eb7d63 --- /dev/null +++ b/examples/lua/usdt_ruby.lua @@ -0,0 +1,42 @@ +#!/usr/bin/env bcc-lua +--[[ +Copyright 2016 GitHub, Inc + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +]] + +local program = [[ +#include +int trace_method(struct pt_regs *ctx) { + char fn_name[128] = {}; + bpf_usdt_readarg_p(method__entry_2, ctx, &fn_name, sizeof(fn_name)); + bpf_trace_printk("%s(...)\n", &fn_name); + return 0; +}; +]] + +return function(BPF, util) + if not arg[1] then + print("usage: rubysyms.lua PID") + return + end + + local u = util.USDT:new{pid=tonumber(arg[1])} + u:enable_probe{probe="method__entry", fn_name="trace_method"} + + local b = BPF:new{text=program, usdt=u} + local pipe = b:pipe() + while true do + print(pipe:trace_fields()) + end +end -- 2.7.4