TeamDebugInfo: - Add function to invalidate a source entry's file mapping. UserInterfaceListener: - Add listener hook to be able to invoke the aforementioned invalidate. Add corresponding implementation in TeamDebugger. FileManager: - When asked to locate a source entry, invalidate any existing mapping first. TeamWindow: - Always allow choosing an alternate source file. - If we already have an existing source mapping, invalidate it first before attempting to establish a new one.
114 lines
3.1 KiB
C++
114 lines
3.1 KiB
C++
/*
|
|
* Copyright 2009, Ingo Weinhold, [email protected].
|
|
* Copyright 2014, Rene Gollent, [email protected].
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef TEAM_DEBUG_INFO_H
|
|
#define TEAM_DEBUG_INFO_H
|
|
|
|
|
|
#include <Locker.h>
|
|
|
|
#include <ObjectList.h>
|
|
#include <Referenceable.h>
|
|
#include <util/OpenHashTable.h>
|
|
|
|
#include "GlobalTypeLookup.h"
|
|
#include "ImageInfo.h"
|
|
#include "TeamTypeInformation.h"
|
|
|
|
|
|
class Architecture;
|
|
class DebuggerInterface;
|
|
class DisassembledCode;
|
|
class FileManager;
|
|
class FileSourceCode;
|
|
class Function;
|
|
class FunctionID;
|
|
class FunctionInstance;
|
|
class ImageDebugInfo;
|
|
class ImageDebugInfoLoadingState;
|
|
class ImageInfo;
|
|
class LocatableFile;
|
|
class SourceCode;
|
|
class SourceLocation;
|
|
class SpecificTeamDebugInfo;
|
|
|
|
|
|
class TeamDebugInfo : public GlobalTypeLookup, public TeamTypeInformation {
|
|
public:
|
|
TeamDebugInfo(
|
|
DebuggerInterface* debuggerInterface,
|
|
Architecture* architecture,
|
|
FileManager* fileManager);
|
|
~TeamDebugInfo();
|
|
|
|
status_t Init();
|
|
|
|
virtual status_t GetType(GlobalTypeCache* cache,
|
|
const BString& name,
|
|
const TypeLookupConstraints& constraints,
|
|
Type*& _type);
|
|
|
|
virtual status_t LookupTypeByName(const BString& name,
|
|
const TypeLookupConstraints& constraints,
|
|
Type*& _type);
|
|
|
|
status_t LoadImageDebugInfo(const ImageInfo& imageInfo,
|
|
LocatableFile* imageFile,
|
|
ImageDebugInfoLoadingState& state,
|
|
ImageDebugInfo*& _imageDebugInfo);
|
|
|
|
status_t LoadSourceCode(LocatableFile* file,
|
|
FileSourceCode*& _sourceCode);
|
|
// returns reference
|
|
void ClearSourceCode(LocatableFile* file);
|
|
|
|
status_t DisassembleFunction(
|
|
FunctionInstance* functionInstance,
|
|
DisassembledCode*& _sourceCode);
|
|
// returns reference
|
|
FunctionInstance* MainFunction() const
|
|
{ return fMainFunction; }
|
|
|
|
// team is locked
|
|
status_t AddImageDebugInfo(
|
|
ImageDebugInfo* imageDebugInfo);
|
|
void RemoveImageDebugInfo(
|
|
ImageDebugInfo* imageDebugInfo);
|
|
ImageDebugInfo* ImageDebugInfoByName(const char* name) const;
|
|
|
|
Function* FunctionAtSourceLocation(LocatableFile* file,
|
|
const SourceLocation& location) const;
|
|
Function* FunctionByID(FunctionID* functionID) const;
|
|
|
|
private:
|
|
struct FunctionHashDefinition;
|
|
struct SourceFileEntry;
|
|
struct SourceFileHashDefinition;
|
|
|
|
typedef BObjectList<SpecificTeamDebugInfo> SpecificInfoList;
|
|
typedef BObjectList<ImageDebugInfo> ImageList;
|
|
typedef BOpenHashTable<FunctionHashDefinition> FunctionTable;
|
|
typedef BOpenHashTable<SourceFileHashDefinition> SourceFileTable;
|
|
|
|
private:
|
|
status_t _AddFunction(Function* function);
|
|
void _RemoveFunction(Function* function);
|
|
|
|
private:
|
|
BLocker fLock;
|
|
DebuggerInterface* fDebuggerInterface;
|
|
Architecture* fArchitecture;
|
|
FileManager* fFileManager;
|
|
SpecificInfoList fSpecificInfos;
|
|
ImageList fImages;
|
|
FunctionTable* fFunctions;
|
|
SourceFileTable* fSourceFiles;
|
|
GlobalTypeCache* fTypeCache;
|
|
FunctionInstance* fMainFunction;
|
|
};
|
|
|
|
|
|
#endif // TEAM_DEBUG_INFO_H
|