The debugger interface has changed a bit.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11716 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2005-03-13 23:59:20 +00:00
parent b24684af25
commit edc47dd584
2 changed files with 40 additions and 30 deletions
+12 -10
View File
@@ -239,17 +239,18 @@ set_thread_debugging_flags(port_id nubPort, thread_id thread, int32 flags)
} }
} }
// run_thread // continue_thread
static static
void void
run_thread(port_id nubPort, thread_id thread) continue_thread(port_id nubPort, thread_id thread)
{ {
debug_nub_run_thread message; debug_nub_continue_thread message;
message.thread = thread; message.thread = thread;
message.handle_event = B_THREAD_DEBUG_HANDLE_EVENT; message.handle_event = B_THREAD_DEBUG_HANDLE_EVENT;
message.single_step = false;
while (true) { while (true) {
status_t error = write_port(nubPort, B_DEBUG_MESSAGE_RUN_THREAD, status_t error = write_port(nubPort, B_DEBUG_MESSAGE_CONTINUE_THREAD,
&message, sizeof(message)); &message, sizeof(message));
if (error == B_OK) if (error == B_OK)
return; return;
@@ -517,20 +518,21 @@ main(int argc, const char *const *argv)
break; break;
} }
case B_DEBUGGER_MESSAGE_THREAD_STOPPED: case B_DEBUGGER_MESSAGE_THREAD_DEBUGGED:
case B_DEBUGGER_MESSAGE_DEBUGGER_CALL:
case B_DEBUGGER_MESSAGE_BREAKPOINT_HIT:
case B_DEBUGGER_MESSAGE_WATCHPOINT_HIT:
case B_DEBUGGER_MESSAGE_SINGLE_STEP:
case B_DEBUGGER_MESSAGE_PRE_SYSCALL: case B_DEBUGGER_MESSAGE_PRE_SYSCALL:
case B_DEBUGGER_MESSAGE_SIGNAL_RECEIVED: case B_DEBUGGER_MESSAGE_SIGNAL_RECEIVED:
case B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED: case B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED:
case B_DEBUGGER_MESSAGE_TEAM_CREATED: case B_DEBUGGER_MESSAGE_TEAM_CREATED:
case B_DEBUGGER_MESSAGE_THREAD_CREATED: case B_DEBUGGER_MESSAGE_THREAD_CREATED:
case B_DEBUGGER_MESSAGE_THREAD_DELETED:
case B_DEBUGGER_MESSAGE_IMAGE_CREATED: case B_DEBUGGER_MESSAGE_IMAGE_CREATED:
case B_DEBUGGER_MESSAGE_IMAGE_DELETED: case B_DEBUGGER_MESSAGE_IMAGE_DELETED:
break; break;
case B_DEBUGGER_MESSAGE_THREAD_DELETED:
// nothing to do: a thread was deleted
break;
case B_DEBUGGER_MESSAGE_TEAM_DELETED: case B_DEBUGGER_MESSAGE_TEAM_DELETED:
// the debugged team is gone // the debugged team is gone
exit(0); exit(0);
@@ -539,7 +541,7 @@ main(int argc, const char *const *argv)
// tell the thread to continue (only when there is a thread and the // tell the thread to continue (only when there is a thread and the
// message was synchronous) // message was synchronous)
if (message.origin.thread >= 0 && message.origin.nub_port >= 0) if (message.origin.thread >= 0 && message.origin.nub_port >= 0)
run_thread(message.origin.nub_port, message.origin.thread); continue_thread(message.origin.nub_port, message.origin.thread);
} }
return 0; return 0;
+28 -20
View File
@@ -35,14 +35,14 @@ public:
{ {
} }
void SetCode(int32 code) { fCode = code; } void SetCode(debug_debugger_message code) { fCode = code; }
int32 Code() const { return fCode; } debug_debugger_message Code() const { return fCode; }
debug_debugger_message_data &Data() { return fData; } debug_debugger_message_data &Data() { return fData; }
const debug_debugger_message_data &Data() const { return fData; } const debug_debugger_message_data &Data() const { return fData; }
private: private:
int32 fCode; debug_debugger_message fCode;
debug_debugger_message_data fData; debug_debugger_message_data fData;
}; };
@@ -156,15 +156,21 @@ ThreadDebugHandler::HandleMessage(DebugMessage *message)
// get some user-readable message // get some user-readable message
char buffer[512]; char buffer[512];
if (message->Code() == B_DEBUGGER_MESSAGE_THREAD_STOPPED) { switch (message->Code()) {
get_debug_why_stopped_string(message->Data().thread_stopped.why, buffer, case B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED:
sizeof(buffer)); get_debug_exception_string(
} else if (message->Code() == B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED) { message->Data().exception_occurred.exception, buffer,
get_debug_exception_string(message->Data().exception_occurred.exception, sizeof(buffer));
buffer, sizeof(buffer)); break;
} else { case B_DEBUGGER_MESSAGE_DEBUGGER_CALL:
// We shouldn't be here. // TODO: Display the debugger message!
sprintf(buffer, "Debug messages %ld", (int32)message->Code()); case B_DEBUGGER_MESSAGE_THREAD_DEBUGGED:
case B_DEBUGGER_MESSAGE_BREAKPOINT_HIT:
case B_DEBUGGER_MESSAGE_WATCHPOINT_HIT:
case B_DEBUGGER_MESSAGE_SINGLE_STEP:
default:
get_debug_message_string(message->Code(), buffer, sizeof(buffer));
break;
} }
// TODO: This would be the point to pop up an asynchronous alert. // TODO: This would be the point to pop up an asynchronous alert.
@@ -232,8 +238,12 @@ TeamDebugHandler::HandleMessage(DebugMessage *message)
thread_id thread = message->Data().origin.thread; thread_id thread = message->Data().origin.thread;
switch (message->Code()) { switch (message->Code()) {
case B_DEBUGGER_MESSAGE_THREAD_STOPPED: case B_DEBUGGER_MESSAGE_THREAD_DEBUGGED:
case B_DEBUGGER_MESSAGE_DEBUGGER_CALL:
case B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED: case B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED:
case B_DEBUGGER_MESSAGE_BREAKPOINT_HIT:
case B_DEBUGGER_MESSAGE_WATCHPOINT_HIT:
case B_DEBUGGER_MESSAGE_SINGLE_STEP:
{ {
fNubPort = message->Data().origin.nub_port; fNubPort = message->Data().origin.nub_port;
@@ -253,10 +263,6 @@ TeamDebugHandler::HandleMessage(DebugMessage *message)
case B_DEBUGGER_MESSAGE_TEAM_DELETED: case B_DEBUGGER_MESSAGE_TEAM_DELETED:
return true; return true;
case B_DEBUGGER_MESSAGE_THREAD_DELETED:
// a thread is gone: nothing to do
break;
case B_DEBUGGER_MESSAGE_SIGNAL_RECEIVED: case B_DEBUGGER_MESSAGE_SIGNAL_RECEIVED:
// A signal doesn't usually trigger the debugger. // A signal doesn't usually trigger the debugger.
// Just let the thread continue and see what happens next. // Just let the thread continue and see what happens next.
@@ -264,6 +270,7 @@ TeamDebugHandler::HandleMessage(DebugMessage *message)
case B_DEBUGGER_MESSAGE_POST_SYSCALL: case B_DEBUGGER_MESSAGE_POST_SYSCALL:
case B_DEBUGGER_MESSAGE_TEAM_CREATED: case B_DEBUGGER_MESSAGE_TEAM_CREATED:
case B_DEBUGGER_MESSAGE_THREAD_CREATED: case B_DEBUGGER_MESSAGE_THREAD_CREATED:
case B_DEBUGGER_MESSAGE_THREAD_DELETED:
case B_DEBUGGER_MESSAGE_IMAGE_CREATED: case B_DEBUGGER_MESSAGE_IMAGE_CREATED:
case B_DEBUGGER_MESSAGE_IMAGE_DELETED: case B_DEBUGGER_MESSAGE_IMAGE_DELETED:
fNubPort = message->Data().origin.nub_port; fNubPort = message->Data().origin.nub_port;
@@ -292,12 +299,13 @@ TeamDebugHandler::KillTeam()
void void
TeamDebugHandler::_ContinueThread(thread_id thread) TeamDebugHandler::_ContinueThread(thread_id thread)
{ {
debug_nub_run_thread message; debug_nub_continue_thread message;
message.thread = thread; message.thread = thread;
message.handle_event = B_THREAD_DEBUG_HANDLE_EVENT; message.handle_event = B_THREAD_DEBUG_HANDLE_EVENT;
message.single_step = false;
while (true) { while (true) {
status_t error = write_port(fNubPort, B_DEBUG_MESSAGE_RUN_THREAD, status_t error = write_port(fNubPort, B_DEBUG_MESSAGE_CONTINUE_THREAD,
&message, sizeof(message)); &message, sizeof(message));
if (error == B_OK) if (error == B_OK)
return; return;
@@ -452,7 +460,7 @@ DebugServer::_Listener()
exit(1); exit(1);
} }
message->SetCode(code); message->SetCode((debug_debugger_message)code);
// queue the message and send notify the app // queue the message and send notify the app
Lock(); Lock();