Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 3442 → Rev 3441

/trunk/uspace/app/trace/trace.c
72,7 → 72,9
{
int rc;
 
printf("ipc_connect_task(%lld)... ", task_id);
rc = ipc_connect_kbox(task_id);
printf("-> %d\n", rc);
 
if (rc == ENOTSUP) {
printf("You do not have userspace debugging support "
79,28 → 81,20
"compiled in the kernel.\n");
printf("Compile kernel with 'Support for userspace debuggers' "
"(CONFIG_UDEBUG) enabled.\n");
return rc;
}
 
if (rc < 0) {
printf("Error connecting\n");
printf("ipc_connect_task(%lld) -> %d ", task_id, rc);
return rc;
}
 
phoneid = rc;
if (rc < 0) return rc;
 
printf("udebug_begin()... ");
rc = udebug_begin(phoneid);
if (rc < 0) {
printf("udebug_begin() -> %d\n", rc);
return rc;
}
printf("-> %d\n", rc);
if (rc < 0) return rc;
 
printf("udebug_set_evmask(0x%x)... ", UDEBUG_EM_ALL);
rc = udebug_set_evmask(phoneid, UDEBUG_EM_ALL);
if (rc < 0) {
printf("udebug_set_evmask(0x%x) -> %d\n ", UDEBUG_EM_ALL, rc);
return rc;
}
printf("-> %d\n", rc);
if (rc < 0) return rc;
 
return 0;
}
112,18 → 106,17
size_t tb_needed;
int i;
 
printf("send IPC_M_DEBUG_THREAD_READ message\n");
rc = udebug_thread_read(phoneid, thread_hash_buf,
THBUF_SIZE*sizeof(unsigned), &tb_copied, &tb_needed);
if (rc < 0) {
printf("udebug_thread_read() -> %d\n", rc);
return rc;
}
printf("-> %d\n", rc);
if (rc < 0) return rc;
 
n_threads = tb_copied / sizeof(unsigned);
 
printf("Threads:");
for (i = 0; i < n_threads; i++) {
printf(" [%d] (hash 0x%u)", 1+i, thread_hash_buf[i]);
printf("thread IDs:");
for (i=0; i<n_threads; i++) {
printf(" %u", thread_hash_buf[i]);
}
printf("\ntotal of %u threads\n", tb_needed/sizeof(unsigned));
 
341,7 → 334,7
static void event_thread_b(unsigned hash)
{
async_serialize_start();
printf("New thread, hash 0x%x\n", hash);
printf("new thread, hash 0x%x\n", hash);
async_serialize_end();
 
thread_trace_start(hash);
358,7 → 351,7
thread_hash = (unsigned)thread_hash_arg;
thread_id = next_thread_id++;
 
printf("Start tracing thread [%d] (hash 0x%x)\n", thread_id, thread_hash);
printf("trace_loop(%d)\n", thread_id);
 
while (!abort_trace) {
 
368,7 → 361,7
 
// printf("rc = %d, ev_type=%d\n", rc, ev_type);
if (ev_type == UDEBUG_EVENT_FINISHED) {
/* Done tracing this thread */
printf("thread %u debugging finished\n", thread_id);
break;
}
 
381,24 → 374,24
event_syscall_e(thread_id, thread_hash, val0, (int)val1);
break;
case UDEBUG_EVENT_STOP:
printf("Stop event\n");
printf("Waiting for resume\n");
printf("stop event\n");
printf("waiting for resume\n");
while (paused) {
usleep(1000000);
fibril_yield();
printf(".");
}
printf("Resumed\n");
printf("resumed\n");
break;
case UDEBUG_EVENT_THREAD_B:
event_thread_b(val0);
break;
case UDEBUG_EVENT_THREAD_E:
printf("Thread 0x%x exited\n", val0);
printf("thread 0x%x exited\n", val0);
abort_trace = 1;
break;
default:
printf("Unknown event type %d\n", ev_type);
printf("unknown event type %d\n", ev_type);
break;
}
}
405,7 → 398,7
 
}
 
printf("Finished tracing thread [%d]\n", thread_id);
printf("trace_loop(%d) exiting\n", thread_id);
return 0;
}
 
439,13 → 432,8
printf("Connected to task %lld\n", task_id);
 
ipcp_init();
ipcp_connection_set(1, 0, proto_console);
 
/*
* User apps now typically have console on phone 3.
* (Phones 1 and 2 are used by the loader).
*/
ipcp_connection_set(3, 0, proto_console);
 
rc = get_thread_list();
if (rc < 0) {
printf("Failed to get thread list (error %d)\n", rc);
471,7 → 459,7
}
}
 
printf("\nTerminate debugging session...\n");
printf("terminate debugging session...\n");
abort_trace = 1;
udebug_end(phoneid);
ipc_hangup(phoneid);
478,7 → 466,7
 
ipcp_cleanup();
 
printf("Done\n");
printf("done\n");
return;
}
 
532,7 → 520,7
 
static void print_syntax()
{
printf("Syntax: trace <task_id>\n");
printf("syntax: trace <task_id>\n");
}
 
int main(int argc, char *argv[])