Tie DebugReportGenerator into TeamDebugger.

- Add UI listener hook. Still needs to be exposed via the actual
  UI though.
This commit is contained in:
Rene Gollent
2012-11-18 13:10:31 -05:00
parent 8e0e0918b6
commit 2efebaa1d1
4 changed files with 52 additions and 1 deletions
+2 -1
View File
@@ -55,7 +55,8 @@ enum {
MSG_INSPECT_ADDRESS = 'isad', MSG_INSPECT_ADDRESS = 'isad',
MSG_SHOW_TYPECAST_NODE_PROMPT = 'stnp', MSG_SHOW_TYPECAST_NODE_PROMPT = 'stnp',
MSG_TYPECAST_NODE = 'tyno', MSG_TYPECAST_NODE = 'tyno',
MSG_SHOW_WATCH_VARIABLE_PROMPT = 'swvp' MSG_SHOW_WATCH_VARIABLE_PROMPT = 'swvp',
MSG_GENERATE_DEBUG_REPORT = 'gdrp'
}; };
@@ -12,6 +12,7 @@
#include <new> #include <new>
#include <Entry.h>
#include <Message.h> #include <Message.h>
#include <AutoLocker.h> #include <AutoLocker.h>
@@ -22,6 +23,7 @@
#include "BreakpointSetting.h" #include "BreakpointSetting.h"
#include "CpuState.h" #include "CpuState.h"
#include "DebuggerInterface.h" #include "DebuggerInterface.h"
#include "DebugReportGenerator.h"
#include "FileManager.h" #include "FileManager.h"
#include "Function.h" #include "Function.h"
#include "FunctionID.h" #include "FunctionID.h"
@@ -146,6 +148,7 @@ TeamDebugger::TeamDebugger(Listener* listener, UserInterface* userInterface,
fBreakpointManager(NULL), fBreakpointManager(NULL),
fWatchpointManager(NULL), fWatchpointManager(NULL),
fMemoryBlockManager(NULL), fMemoryBlockManager(NULL),
fReportGenerator(NULL),
fDebugEventListener(-1), fDebugEventListener(-1),
fUserInterface(userInterface), fUserInterface(userInterface),
fTerminating(false), fTerminating(false),
@@ -204,6 +207,7 @@ TeamDebugger::~TeamDebugger()
delete fBreakpointManager; delete fBreakpointManager;
delete fWatchpointManager; delete fWatchpointManager;
delete fMemoryBlockManager; delete fMemoryBlockManager;
delete fReportGenerator;
delete fWorker; delete fWorker;
delete fTeam; delete fTeam;
delete fFileManager; delete fFileManager;
@@ -327,6 +331,15 @@ TeamDebugger::Init(team_id teamID, thread_id threadID, bool stopInMain)
if (error != B_OK) if (error != B_OK)
return error; return error;
// create the debug report generator
fReportGenerator = new(std::nothrow) DebugReportGenerator(fTeam);
if (fReportGenerator == NULL)
return B_NO_MEMORY;
error = fReportGenerator->Init();
if (error != B_OK)
return error;
// set team debugging flags // set team debugging flags
fDebuggerInterface->SetTeamDebuggingFlags( fDebuggerInterface->SetTeamDebuggingFlags(
B_TEAM_DEBUG_THREADS | B_TEAM_DEBUG_IMAGES); B_TEAM_DEBUG_THREADS | B_TEAM_DEBUG_IMAGES);
@@ -535,6 +548,14 @@ TeamDebugger::MessageReceived(BMessage* message)
break; break;
} }
case MSG_GENERATE_DEBUG_REPORT:
{
entry_ref ref;
if (message->FindRef("target", &ref) == B_OK)
_HandleGenerateDebugReport(ref);
break;
}
case MSG_THREAD_STATE_CHANGED: case MSG_THREAD_STATE_CHANGED:
{ {
int32 threadID; int32 threadID;
@@ -809,6 +830,15 @@ TeamDebugger::InspectRequested(target_addr_t address,
} }
void
TeamDebugger::DebugReportRequested(entry_ref* targetPath)
{
BMessage message(MSG_GENERATE_DEBUG_REPORT);
message.AddRef("target", targetPath);
PostMessage(&message);
}
bool bool
TeamDebugger::UserInterfaceQuitRequested(QuitOption quitOption) TeamDebugger::UserInterfaceQuitRequested(QuitOption quitOption)
{ {
@@ -1502,6 +1532,13 @@ TeamDebugger::_HandleInspectAddress(target_addr_t address,
} }
void
TeamDebugger::_HandleGenerateDebugReport(const entry_ref& ref)
{
fReportGenerator->GenerateReport(ref);
}
ThreadHandler* ThreadHandler*
TeamDebugger::_GetThreadHandler(thread_id threadID) TeamDebugger::_GetThreadHandler(thread_id threadID)
{ {
@@ -20,6 +20,7 @@
class DebuggerInterface; class DebuggerInterface;
class DebugReportGenerator;
class FileManager; class FileManager;
class SettingsManager; class SettingsManager;
class TeamDebugInfo; class TeamDebugInfo;
@@ -78,6 +79,9 @@ private:
virtual void InspectRequested(target_addr_t address, virtual void InspectRequested(target_addr_t address,
TeamMemoryBlock::Listener* listener); TeamMemoryBlock::Listener* listener);
virtual void DebugReportRequested(entry_ref* targetPath);
virtual bool UserInterfaceQuitRequested( virtual bool UserInterfaceQuitRequested(
QuitOption quitOption); QuitOption quitOption);
@@ -143,6 +147,9 @@ private:
target_addr_t address, target_addr_t address,
TeamMemoryBlock::Listener* listener); TeamMemoryBlock::Listener* listener);
void _HandleGenerateDebugReport(
const entry_ref& target);
ThreadHandler* _GetThreadHandler(thread_id threadID); ThreadHandler* _GetThreadHandler(thread_id threadID);
status_t _AddImage(const ImageInfo& imageInfo, status_t _AddImage(const ImageInfo& imageInfo,
@@ -170,6 +177,8 @@ private:
WatchpointManager* fWatchpointManager; WatchpointManager* fWatchpointManager;
TeamMemoryBlockManager* TeamMemoryBlockManager*
fMemoryBlockManager; fMemoryBlockManager;
DebugReportGenerator*
fReportGenerator;
thread_id fDebugEventListener; thread_id fDebugEventListener;
UserInterface* fUserInterface; UserInterface* fUserInterface;
volatile bool fTerminating; volatile bool fTerminating;
@@ -14,6 +14,8 @@
#include "Types.h" #include "Types.h"
class entry_ref;
class CpuState; class CpuState;
class FunctionInstance; class FunctionInstance;
class Image; class Image;
@@ -116,6 +118,8 @@ public:
target_addr_t address, target_addr_t address,
TeamMemoryBlock::Listener* listener) = 0; TeamMemoryBlock::Listener* listener) = 0;
virtual void DebugReportRequested(entry_ref* path) = 0;
virtual bool UserInterfaceQuitRequested( virtual bool UserInterfaceQuitRequested(
QuitOption quitOption QuitOption quitOption
= QUIT_OPTION_ASK_USER) = 0; = QUIT_OPTION_ASK_USER) = 0;