[Haiku-commits] r31083 - haiku/trunk/src/apps/debugger
bonefish at mail.berlios.de
bonefish at mail.berlios.de
Wed Jun 17 15:40:15 CEST 2009
Author: bonefish
Date: 2009-06-17 15:40:10 +0200 (Wed, 17 Jun 2009)
New Revision: 31083
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=31083&view=rev
Modified:
haiku/trunk/src/apps/debugger/Jamfile
haiku/trunk/src/apps/debugger/TeamDebugger.cpp
haiku/trunk/src/apps/debugger/TeamDebugger.h
Log:
* Init a debug context and set the team debug event flags.
* Handle the "thread/image created/deleted" events, maintaining the Team's
lists.
Modified: haiku/trunk/src/apps/debugger/Jamfile
===================================================================
--- haiku/trunk/src/apps/debugger/Jamfile 2009-06-17 13:35:27 UTC (rev 31082)
+++ haiku/trunk/src/apps/debugger/Jamfile 2009-06-17 13:40:10 UTC (rev 31083)
@@ -3,7 +3,7 @@
CCFLAGS += -Werror ;
C++FLAGS += -Werror ;
-UsePrivateHeaders interface kernel shared ;
+UsePrivateHeaders debug interface kernel shared ;
UsePrivateSystemHeaders ;
SEARCH_SOURCE += [ FDirName $(SUBDIR) gui team_window ] ;
@@ -47,7 +47,7 @@
libcolumnlistview.a
$(TARGET_LIBSTDC++)
- be
+ be debug
: Debugger.rdef
;
Modified: haiku/trunk/src/apps/debugger/TeamDebugger.cpp
===================================================================
--- haiku/trunk/src/apps/debugger/TeamDebugger.cpp 2009-06-17 13:35:27 UTC (rev 31082)
+++ haiku/trunk/src/apps/debugger/TeamDebugger.cpp 2009-06-17 13:40:10 UTC (rev 31083)
@@ -13,6 +13,8 @@
#include <AutoLocker.h>
+#include "debug_utils.h"
+
#include "Team.h"
@@ -82,8 +84,15 @@
if (fNubPort < 0)
return fNubPort;
-// TODO: Set the debug event flags!
+ // init debug context
+ error = init_debug_context(&fDebugContext, fTeamID, fNubPort);
+ if (error != B_OK)
+ return error;
+ // set team debugging flags
+ set_team_debugging_flags(fNubPort,
+ B_TEAM_DEBUG_THREADS | B_TEAM_DEBUG_IMAGES);
+
// get the initial state of the team
AutoLocker< ::Team> teamLocker(fTeam);
@@ -199,32 +208,48 @@
TeamDebugger::_HandleDebuggerMessage(int32 messageCode,
const debug_debugger_message_data& message)
{
+printf("TeamDebugger::_HandleDebuggerMessage(): %ld\n", messageCode);
+ bool handled = false;
+
switch (messageCode) {
case B_DEBUGGER_MESSAGE_THREAD_DEBUGGED:
+printf("B_DEBUGGER_MESSAGE_THREAD_DEBUGGED: thread: %ld\n", message.origin.thread);
break;
case B_DEBUGGER_MESSAGE_DEBUGGER_CALL:
+printf("B_DEBUGGER_MESSAGE_DEBUGGER_CALL: thread: %ld\n", message.origin.thread);
break;
case B_DEBUGGER_MESSAGE_BREAKPOINT_HIT:
+printf("B_DEBUGGER_MESSAGE_BREAKPOINT_HIT: thread: %ld\n", message.origin.thread);
break;
case B_DEBUGGER_MESSAGE_WATCHPOINT_HIT:
+printf("B_DEBUGGER_MESSAGE_WATCHPOINT_HIT: thread: %ld\n", message.origin.thread);
break;
case B_DEBUGGER_MESSAGE_SINGLE_STEP:
+printf("B_DEBUGGER_MESSAGE_SINGLE_STEP: thread: %ld\n", message.origin.thread);
break;
case B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED:
+printf("B_DEBUGGER_MESSAGE_EXCEPTION_OCCURRED: thread: %ld\n", message.origin.thread);
break;
case B_DEBUGGER_MESSAGE_TEAM_CREATED:
+printf("B_DEBUGGER_MESSAGE_TEAM_CREATED: team: %ld\n", message.team_created.new_team);
break;
case B_DEBUGGER_MESSAGE_TEAM_DELETED:
+printf("B_DEBUGGER_MESSAGE_TEAM_DELETED: team: %ld\n", message.origin.team);
break;
case B_DEBUGGER_MESSAGE_TEAM_EXEC:
+printf("B_DEBUGGER_MESSAGE_TEAM_EXEC: team: %ld\n", message.origin.team);
break;
case B_DEBUGGER_MESSAGE_THREAD_CREATED:
+ handled = _HandleThreadCreated(message.thread_created);
break;
case B_DEBUGGER_MESSAGE_THREAD_DELETED:
+ handled = _HandleThreadDeleted(message.thread_deleted);
break;
case B_DEBUGGER_MESSAGE_IMAGE_CREATED:
+ handled = _HandleImageCreated(message.image_created);
break;
case B_DEBUGGER_MESSAGE_IMAGE_DELETED:
+ handled = _HandleImageDeleted(message.image_deleted);
break;
case B_DEBUGGER_MESSAGE_PRE_SYSCALL:
case B_DEBUGGER_MESSAGE_POST_SYSCALL:
@@ -238,4 +263,43 @@
"%ld\n", fTeamID, messageCode);
break;
}
+
+ if (!handled && message.origin.thread >= 0 && message.origin.nub_port >= 0)
+ continue_thread(message.origin.nub_port, message.origin.thread);
}
+
+
+bool
+TeamDebugger::_HandleThreadCreated(const debug_thread_created& message)
+{
+ AutoLocker< ::Team> locker(fTeam);
+ fTeam->AddThread(message.new_thread);
+ return false;
+}
+
+
+bool
+TeamDebugger::_HandleThreadDeleted(const debug_thread_deleted& message)
+{
+ AutoLocker< ::Team> locker(fTeam);
+ fTeam->RemoveThread(message.origin.thread);
+ return false;
+}
+
+
+bool
+TeamDebugger::_HandleImageCreated(const debug_image_created& message)
+{
+ AutoLocker< ::Team> locker(fTeam);
+ fTeam->AddImage(message.info);
+ return false;
+}
+
+
+bool
+TeamDebugger::_HandleImageDeleted(const debug_image_deleted& message)
+{
+ AutoLocker< ::Team> locker(fTeam);
+ fTeam->RemoveImage(message.info.id);
+ return false;
+}
Modified: haiku/trunk/src/apps/debugger/TeamDebugger.h
===================================================================
--- haiku/trunk/src/apps/debugger/TeamDebugger.h 2009-06-17 13:35:27 UTC (rev 31082)
+++ haiku/trunk/src/apps/debugger/TeamDebugger.h 2009-06-17 13:40:10 UTC (rev 31083)
@@ -8,6 +8,7 @@
#include <debugger.h>
#include <Looper.h>
+#include <debug_support.h>
#include <util/DoublyLinkedList.h>
#include "TeamWindow.h"
@@ -37,11 +38,21 @@
void _HandleDebuggerMessage(int32 messageCode,
const debug_debugger_message_data& message);
+ bool _HandleThreadCreated(
+ const debug_thread_created& message);
+ bool _HandleThreadDeleted(
+ const debug_thread_deleted& message);
+ bool _HandleImageCreated(
+ const debug_image_created& message);
+ bool _HandleImageDeleted(
+ const debug_image_deleted& message);
+
private:
::Team* fTeam;
team_id fTeamID;
port_id fDebuggerPort;
port_id fNubPort;
+ debug_context fDebugContext;
thread_id fDebugEventListener;
TeamWindow* fTeamWindow;
volatile bool fTerminating;
More information about the Haiku-commits
mailing list