Anuj Goyal
2008-Feb-21 02:06 UTC
[dtrace-discuss] how to get a set of functions being called from within a thread
How would I get a set of functions being called from within a thread? eg. I want bar() and collect() to be flagged, but not foo() and main(). e.g. I would want #include <stdio.h> #include <math.h> #include <pthread.h> #define NGRPS 30 #define NTHRS 10 int object_count = 0; int* object_array; int group_array[NGRPS]; int total_count = 0; void bar(){return;} void* collect(void* arg) { int j; int group_id = *((int *) arg); int group_count = 0; for (j = 0; j < object_count; j++) { int current_object = object_array[j]; group_count++; } total_count += group_count; bar(); return NULL; } void foo() {int i;} int main(int argc, char** argv) { int i; pthread_t pids[NTHRS -1]; object_count = argv[1]; for (i = 0; i < NTHRS; i++) { pthread_create(&pids[i], NULL, collect, (void*) &i); } if (total_count != object_count) { printf(" the collected object count %d doesn''t match the original object count %d\n", total_count, object_count); } return 0; } -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.opensolaris.org/pipermail/dtrace-discuss/attachments/20080220/a997e993/attachment.html>
Adam Leventhal
2008-Feb-21 03:26 UTC
[dtrace-discuss] how to get a set of functions being called from within a thread
Hi Anuj, You may need to provide a few more details, but DTrace allows you to trace exactly what you want. Just specify the function component of the pid provider probe: pid123::foo:entry You should take a look at the chapter in the DTrace docs on tracing user-land processes. - ahl [$] On Feb 20, 2008, at 6:06 PM, Anuj Goyal <anuj.goyal at gmail.com> wrote:> How would I get a set of functions being called from within a > thread? eg. I want bar() and collect() to be flagged, but not foo() > and main(). > > e.g. I would want > > > #include <stdio.h> > #include <math.h> > #include <pthread.h> > > #define NGRPS 30 > #define NTHRS 10 > > int object_count = 0; > int* object_array; > int group_array[NGRPS]; > int total_count = 0; > > void bar(){return;} > > void* collect(void* arg) > { > int j; > > int group_id = *((int *) arg); > int group_count = 0; > > for (j = 0; j < object_count; j++) { > int current_object = object_array[j]; > group_count++; > } > total_count += group_count; > bar(); > return NULL; > } > > void foo() {int i;} > > int main(int argc, char** argv) > { > int i; > pthread_t pids[NTHRS -1]; > > object_count = argv[1]; > > for (i = 0; i < NTHRS; i++) { > pthread_create(&pids[i], NULL, collect, (void*) &i); > } > > if (total_count != object_count) { > printf(" the collected object count %d doesn''t match the > original object count %d\n", > total_count, object_count); > } > return 0; > } > > > _______________________________________________ > dtrace-discuss mailing list > dtrace-discuss at opensolaris.org