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
dtrace-discuss@opensolaris.org

Reply via email to