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_SHOW_TYPECAST_NODE_PROMPT = 'stnp',
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 <Entry.h>
#include <Message.h>
#include <AutoLocker.h>
@@ -22,6 +23,7 @@
#include "BreakpointSetting.h"
#include "CpuState.h"
#include "DebuggerInterface.h"
#include "DebugReportGenerator.h"
#include "FileManager.h"
#include "Function.h"
#include "FunctionID.h"
@@ -146,6 +148,7 @@ TeamDebugger::TeamDebugger(Listener* listener, UserInterface* userInterface,
fBreakpointManager(NULL),
fWatchpointManager(NULL),
fMemoryBlockManager(NULL),
fReportGenerator(NULL),
fDebugEventListener(-1),
fUserInterface(userInterface),
fTerminating(false),
@@ -204,6 +207,7 @@ TeamDebugger::~TeamDebugger()
delete fBreakpointManager;
delete fWatchpointManager;
delete fMemoryBlockManager;
delete fReportGenerator;
delete fWorker;
delete fTeam;
delete fFileManager;
@@ -327,6 +331,15 @@ TeamDebugger::Init(team_id teamID, thread_id threadID, bool stopInMain)
if (error != B_OK)
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
fDebuggerInterface->SetTeamDebuggingFlags(
B_TEAM_DEBUG_THREADS | B_TEAM_DEBUG_IMAGES);
@@ -535,6 +548,14 @@ TeamDebugger::MessageReceived(BMessage* message)
break;
}
case MSG_GENERATE_DEBUG_REPORT:
{
entry_ref ref;
if (message->FindRef("target", &ref) == B_OK)
_HandleGenerateDebugReport(ref);
break;
}
case MSG_THREAD_STATE_CHANGED:
{
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
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*
TeamDebugger::_GetThreadHandler(thread_id threadID)
{
@@ -20,6 +20,7 @@
class DebuggerInterface;
class DebugReportGenerator;
class FileManager;
class SettingsManager;
class TeamDebugInfo;
@@ -78,6 +79,9 @@ private:
virtual void InspectRequested(target_addr_t address,
TeamMemoryBlock::Listener* listener);
virtual void DebugReportRequested(entry_ref* targetPath);
virtual bool UserInterfaceQuitRequested(
QuitOption quitOption);
@@ -143,6 +147,9 @@ private:
target_addr_t address,
TeamMemoryBlock::Listener* listener);
void _HandleGenerateDebugReport(
const entry_ref& target);
ThreadHandler* _GetThreadHandler(thread_id threadID);
status_t _AddImage(const ImageInfo& imageInfo,
@@ -170,6 +177,8 @@ private:
WatchpointManager* fWatchpointManager;
TeamMemoryBlockManager*
fMemoryBlockManager;
DebugReportGenerator*
fReportGenerator;
thread_id fDebugEventListener;
UserInterface* fUserInterface;
volatile bool fTerminating;
@@ -14,6 +14,8 @@
#include "Types.h"
class entry_ref;
class CpuState;
class FunctionInstance;
class Image;
@@ -116,6 +118,8 @@ public:
target_addr_t address,
TeamMemoryBlock::Listener* listener) = 0;
virtual void DebugReportRequested(entry_ref* path) = 0;
virtual bool UserInterfaceQuitRequested(
QuitOption quitOption
= QUIT_OPTION_ASK_USER) = 0;