I am using the "-C" option to invoke the C preprocessor and include Apache's
httpd.h in a dtrace script. This lets me dereference Apache's request_rec
struct and pull some great per-request details.
But it won't work "out of the box." Dtrace (or the D compiler in libdtrace)
fails to parse the cpp output. I have to run cpp manually on httpd.h, saving
the output to a monolithic dot-h file and then iteratively remove lines from
that file when Dtrace complains about them until I have a "working" file.
After that, it's just awesome.
I guess my question is, is there any Dtrace debug flag that will give me more
information on the parse error? Where are the "-x" (compiler and tracing)
options defined? If I understood the parse error (found ABC but expecting
XYZ), maybe I could contribute something back.
Here's all I see now:
$ sudo dtrace -32 -C -I /export/home/amitchel/include -s
watchApacheRequestsTestingCPP.d -p 16770
dtrace: failed to compile script watchApacheRequestsTestingCPP.d:
"/export/home/amitchel/include/apr_thread_mutex.h", line 100: syntax error near
"#"
Line 100 is:
APR_POOL_DECLARE_ACCESSOR(thread_mutex);
My script is:
$ cat watchApacheRequestsTestingCPP.d
#!/usr/sbin/dtrace
#include <httpd.h>
pid$target:a.out:ap_process_request:entry
{
self->ts = timestamp;
self->r = (request_rec*) copyin(arg0, sizeof(request_rec));
self->uri = copyinstr((uintptr_t) self->r->uri);
}
pid$target:a.out:ap_process_request:return
/self->ts/
{
@request_uris[self->uri] = quantize((timestamp - self->ts) / 1000000);
self->ts = 0;
self->uri = "err";
}
tick-5s
{
printa(@request_uris);
}
--
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
[email protected]