* Worker:
- Made Job Referenceable.
- Turned JobKey into an abstract base class to add flexibility. The new
SimpleJobKey is a subclass with the former functionality.
* TeamWindow: Removed the TeamWindow* parameter from the listener hooks. The
TeamDebugger knows anyway.
* Added IDs to Variable, Function, and FunctionInstance. The latter two generate
the ID on the fly, Variable stores it.
* SpecificImageDebugInfo::CreateFrame(): Changed FunctionDebugInfo* debug
parameter to FunctionInstance* to provide more info (the function ID).
* DwarfInterfaceFactory/DwarfImageDebugInfo:
- Added class DwarfFunctionParameterID, an ID class implementation for
function parameters and set the IDs on the parameter objects.
- Retrieve the size of a type (i.e. the size of its objects) and store it in
DwarfType.
- If a parameter's ValueLocation doesn't have a size, set that of the
respective type.
- Map the register indicies in the parameters' ValueLocations from DWARF to
our indices.
* Added class TypeComponentPath for identifying subcomponents in types.
* Added class StackFrameValues, a container associating variables and their
subcomponents with values.
* StackFrame does now have a StackFrameValues object for parameters and local
variables and a mechanism to notify listeners when values have been retrieved.
* Added GetStackFrameValueJob to retrieve variable values. Lots of functionality
is missing yet. Most notably it doesn't retrieves values for subcomponents.
* Wired everything to trigger loading of variable values and getting notified
when done.
* VariablesView: Added a value column. This is all very basic and has to be
done differently, but at least values for the parameters can be seen already.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31636 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -28,10 +28,13 @@
|
||||
#include "MessageCodes.h"
|
||||
#include "SourceCode.h"
|
||||
#include "SpecificImageDebugInfo.h"
|
||||
#include "StackFrame.h"
|
||||
#include "StackFrameValues.h"
|
||||
#include "Statement.h"
|
||||
#include "SymbolInfo.h"
|
||||
#include "TeamDebugInfo.h"
|
||||
#include "TeamDebugModel.h"
|
||||
#include "Variable.h"
|
||||
|
||||
// #pragma mark - ImageHandler
|
||||
|
||||
@@ -482,8 +485,7 @@ TeamDebugger::MessageReceived(BMessage* message)
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::FunctionSourceCodeRequested(TeamWindow* window,
|
||||
FunctionInstance* functionInstance)
|
||||
TeamDebugger::FunctionSourceCodeRequested(FunctionInstance* functionInstance)
|
||||
{
|
||||
Function* function = functionInstance->GetFunction();
|
||||
|
||||
@@ -520,14 +522,39 @@ TeamDebugger::FunctionSourceCodeRequested(TeamWindow* window,
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::ImageDebugInfoRequested(TeamWindow* window, Image* image)
|
||||
TeamDebugger::ImageDebugInfoRequested(Image* image)
|
||||
{
|
||||
LoadImageDebugInfoJob::ScheduleIfNecessary(fWorker, image);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::ThreadActionRequested(TeamWindow* window, thread_id threadID,
|
||||
TeamDebugger::StackFrameValueRequested(::Thread* thread, StackFrame* stackFrame,
|
||||
Variable* variable, TypeComponentPath* path)
|
||||
{
|
||||
// the team is already locked
|
||||
|
||||
// check whether a job is already in progress
|
||||
AutoLocker<Worker> workerLocker(fWorker);
|
||||
GetStackFrameValueJobKey jobKey(stackFrame, variable, path);
|
||||
if (fWorker->GetJob(jobKey) != NULL)
|
||||
return;
|
||||
workerLocker.Unlock();
|
||||
|
||||
// schedule the job
|
||||
if (fWorker->ScheduleJob(
|
||||
new(std::nothrow) GetStackFrameValueJob(fDebuggerInterface,
|
||||
fDebuggerInterface->GetArchitecture(), fDebugModel, thread,
|
||||
stackFrame, variable, path),
|
||||
this) != B_OK) {
|
||||
// scheduling failed -- set the value to invalid
|
||||
stackFrame->Values()->SetValue(variable->ID(), path, BVariant());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TeamDebugger::ThreadActionRequested(thread_id threadID,
|
||||
uint32 action)
|
||||
{
|
||||
BMessage message(action);
|
||||
@@ -556,7 +583,7 @@ TeamDebugger::ClearBreakpointRequested(target_addr_t address)
|
||||
|
||||
|
||||
bool
|
||||
TeamDebugger::TeamWindowQuitRequested(TeamWindow* window)
|
||||
TeamDebugger::TeamWindowQuitRequested()
|
||||
{
|
||||
AutoLocker< ::Team> locker(fTeam);
|
||||
BString name(fTeam->Name());
|
||||
|
||||
Reference in New Issue
Block a user