Hey Farhan,
You can't use variables (e.g. self->func) as a probespec (the string that
specifies the set of probes to enable), but you can use command-line
arguments. The mistake you're making in the second example is using $$1
(which quotes the first command-line argument); you want to use $1. For
example:
---8<---
# cat foo.d
$1
{
trace("hi");
}
# dtrace -s foo.d BEGIN
dtrace: script 'foo.d' matched 1 probe
CPU ID FUNCTION:NAME
0 1 :BEGIN hi
^C
---8<---
Hopefully that helps.
A couple of notes:
Here's an example that demonstrates where you'd use $$1:
dtrace -n 'BEGIN{ trace($$1) }' foo
If you use just "$1" you'll see an error like this:
dtrace: invalid probe specifier BEGIN{ trace($1) }: in action list: failed
to resolve foo: Unknown variable name
You'll never put the $ before D variables; $variable is exclusively for
macros--replaced before the D language parser executes.
Adam
On Sun, Nov 12, 2017 at 12:19 AM, Farhan Khan <[email protected]> wrote:
> Hi all,
>
> I am trying to write a generic Dtrace script that will read the probe
> function from the console, but can't figure out the syntax. I am doing this:
>
> # ./myscript.d "variable"
>
> I must use the quotes, otherwise it complains that "variable" was not
> found. I want to do:
>
> dtrace:::BEGIN { self->func=$1; }
>
> And then:
>
> fbt::$self->func:entry { ... }
>
> However, $self->func does not seem to work. If I use $$1, it tells me that
> the function fbt::"variable":entry does not exist, because the quotes are
> present. When I remove the quotes from the command line, it gives me that
> initial error.
>
> How do I read in a probefunc name from the console?
>
> Thanks,
>
> Farhan
>
-------------------------------------------
dtrace-discuss
Archives: https://www.listbox.com/member/archive/184261/=now
RSS Feed: https://www.listbox.com/member/archive/rss/184261/25769126-e243886f
Modify Your Subscription:
https://www.listbox.com/member/?member_id=25769126&id_secret=25769126-8d47a7b2
Powered by Listbox: http://www.listbox.com