blob: 8f2186845a651fce18d6c183794223822ce6c93e [file] [log] [blame] [edit]
#include <dispatch/dispatch.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void do_work_level_5(void) {
// Frame 0 will have these variables.
int frame0_var = 100;
const char *frame0_string = "frame_zero";
float frame0_float = 1.5f;
// This is where we'll set the breakpoint.
printf("Level 5 work executing\n"); // Break here.
while (1)
sleep(1);
}
void do_work_level_4(void) {
// Frame 1 will have these variables.
int frame1_var = 200;
const char *frame1_string = "frame_one";
long frame1_long = 9876543210L;
do_work_level_5();
}
void do_work_level_3(void) {
// Frame 2 will have these variables.
int test_variable = 42;
const char *test_string = "test_value";
double test_double = 3.14159;
do_work_level_4();
}
void do_work_level_2(void) { do_work_level_3(); }
void do_work_level_1(void *context) { do_work_level_2(); }
int main(int argc, const char *argv[]) {
// Create a serial dispatch queue.
dispatch_queue_t worker_queue =
dispatch_queue_create("com.test.worker_queue", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t submitter_queue =
dispatch_queue_create("com.test.submitter_queue", DISPATCH_QUEUE_SERIAL);
// Submit work from one queue to another to create extended backtrace.
dispatch_async_f(submitter_queue, &worker_queue, do_work_level_1);
// Keep main thread alive.
dispatch_main();
return 0;
}