Hi All,
I am trying to create a D script to emulate the command
"truss -o ls.truss -f -d -l -t \!all -u
a.out,*::malloc,realloc,free,calloc,fork,vfork,mmap,munmap,mprotect,brk
/bin/firefox"
Is this possible with DTrace due to forking issues? I created this D Script
which I beleive should capture all the calls that truss has but in reality only
captures about 1/4...Ideas?
#!/usr/sbin/dtrace -s
#pragma D option quiet
BEGIN{
self->start = vtimestamp;
printf("Base Time Stamp: %d [ %Y ] \n", vtimestamp, walltimestamp);
}
pid$target::malloc:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d ->
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0,
arg1, arg2, arg3);
self->timer = 0;
self->extra = 0;
}
pid$target::malloc:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid,
self->timer, self->extra, probefunc,arg1);
self->timer = 0;
self->extra = 0;
self->trace = 0;
}
/*pid$target::malloc_internal:return,
pid$target::oversize:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:malloc() = 0x%p\n",pid,
self->timer, self->extra,arg1);
self->timer = 0;
self->extra = 0;
self->trace = 0;
}*/
pid$target::realloc:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d ->
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0,
arg1, arg2, arg3);
self->timer = 0;
self->extra = 0;
self->trace = 1;
}
pid$target::realloc:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid,
self->timer, self->extra, probefunc,arg1);
self->timer = 0;
self->extra = 0;
self->trace = 0;
}
pid$target::calloc:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d ->
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0,
arg1, arg2, arg3);
self->timer = 0;
self->extra = 0;
self->trace = 1;
}
pid$target::calloc:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid,
self->timer, self->extra, probefunc,arg1);
self->timer = 0;
self->extra = 0;
self->trace = 0;
}
pid$target::free:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d ->
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0,
arg1, arg2, arg3);
self->timer = 0;
self->extra = 0;
self->trace = 1;
}
pid$target::free:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid,
self->timer, self->extra, probefunc,arg1);
self->timer = 0;
self->extra = 0;
self->trace = 0;
}
pid$target::mmap:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d ->
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0,
arg1, arg2, arg3);
self->timer = 0;
self->extra = 0;
self->trace = 1;
}
pid$target::mmap:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid,
self->timer, self->extra, probefunc,arg1);
self->timer = 0;
self->extra = 0;
self->trace = 0;
}
pid$target::munmap:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d ->
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0,
arg1, arg2, arg3);
self->timer = 0;
self->extra = 0;
self->trace = 1;
}
pid$target::munmap:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid,
self->timer, self->extra, probefunc,arg1);
self->timer = 0;
self->extra = 0;
self->trace = 0;
}
pid$target::mprotect:entry
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d ->
libc:%s(0x%x,0x%x,0x%x,0x%x)\n",pid, self->timer, self->extra, probefunc, arg0,
arg1, arg2, arg3);
self->timer = 0;
self->extra = 0;
self->trace = 1;
}
pid$target::mprotect:return
{
self->timer = (vtimestamp - self->start)/10000000;
self->extra = (vtimestamp - self->start) - self->timer;
printf("%d/[EMAIL PROTECTED]:\t%d.%0.8d <- libc:%s() = 0x%p\n",pid,
self->timer, self->extra, probefunc,arg1);
self->timer = 0;
self->extra = 0;
self->trace = 0;
}
--
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
[email protected]