if args.method else "" program += trace_template.replace("NAME", func_name) \ .replace("READ_CLASS", read_class) \ .replace("READ_METHOD", read_method) \ .replace("FILTER_CLASS", filter_class) \ .replace("FILTER_METHOD", filter_method) \ .replace("DEPTH", depth) \ .replace("UPDATE", update) usdt.enable_probe_or_bail(probe_name, func_name) usdt = USDT(pid=args.pid) language = args.language if not language: language = utils.detect_language(languages, args.pid) if language == "java": enable_probe("method__entry", "java_entry", "bpf_usdt_readarg(2, ctx, &clazz);", "bpf_usdt_readarg(4, ctx, &method);", is_return=False) enable_probe("method__return", "java_return", "bpf_usdt_readarg(2, ctx, &clazz);", "bpf_usdt_readarg(4, ctx, &method);", is_return=True) elif language == "perl": enable_probe("sub__entry", "perl_entry",
def test_detect_language(self): candidates = ["c", "java", "perl", "php", "node", "ruby", "python"] language = detect_language(candidates, os.getpid()) self.assertEqual(language, "python")
""" % (self.begin, self.begin_save, self.end, args.minimum * 1000000, self.end_save) return text def attach(self): usdt.enable_probe_or_bail(self.begin, "trace_%s" % self.begin) usdt.enable_probe_or_bail(self.end, "trace_%s" % self.end) def format(self, data): return self.formatter(data) probes = [] language = args.language if not language: language = utils.detect_language(languages, args.pid) # # Java # if language == "java": # Oddly, the gc__begin/gc__end probes don't really have any useful # information, while the mem__pool* ones do. There's also a bunch of # probes described in the hotspot_gc*.stp file which aren't there # when looking at a live Java process. begin_save = """ bpf_usdt_readarg(6, ctx, &e.field1); // used bytes bpf_usdt_readarg(8, ctx, &e.field2); // max bytes """ end_save = """ event.field1 = e->field1; // used bytes at start
def test_detect_language(self): candidates = ["c", "java", "perl", "php", "node", "ruby", "python"] language = detect_language(candidates, os.getpid()) self.assertEqual(language, "python")