Tie DebugReportGenerator into TeamDebugger.
- Add UI listener hook. Still needs to be exposed via the actual UI though.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user