break_points: cleaned up, added find_if
s
This commit is contained in:
parent
5a7c3ad194
commit
e3efc613fd
|
@ -9,19 +9,21 @@
|
|||
#include <sstream>
|
||||
#include <algorithm>
|
||||
|
||||
bool BreakPoints::IsAddressBreakPoint(u32 _iAddress)
|
||||
bool BreakPoints::IsAddressBreakPoint(u32 iAddress)
|
||||
{
|
||||
for (auto breakpoint : m_BreakPoints)
|
||||
if (breakpoint.iAddress == _iAddress)
|
||||
return true;
|
||||
auto cond = [&iAddress](const TBreakPoint& bp) { return bp.iAddress == iAddress; };
|
||||
auto it = std::find_if(m_BreakPoints.begin(), m_BreakPoints.end(), cond);
|
||||
if (it != m_BreakPoints.end())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool BreakPoints::IsTempBreakPoint(u32 _iAddress)
|
||||
bool BreakPoints::IsTempBreakPoint(u32 iAddress)
|
||||
{
|
||||
for (auto breakpoint : m_BreakPoints)
|
||||
if (breakpoint.iAddress == _iAddress && breakpoint.bTemporary)
|
||||
return true;
|
||||
auto cond = [&iAddress](const TBreakPoint& bp) { return bp.iAddress == iAddress && bp.bTemporary; };
|
||||
auto it = std::find_if(m_BreakPoints.begin(), m_BreakPoints.end(), cond);
|
||||
if (it != m_BreakPoints.end())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -83,16 +85,10 @@ void BreakPoints::Add(u32 em_address, bool temp)
|
|||
|
||||
void BreakPoints::Remove(u32 em_address)
|
||||
{
|
||||
for (auto i = m_BreakPoints.begin(); i != m_BreakPoints.end(); ++i)
|
||||
{
|
||||
if (i->iAddress == em_address)
|
||||
{
|
||||
m_BreakPoints.erase(i);
|
||||
//if (jit)
|
||||
// jit->GetBlockCache()->InvalidateICache(em_address, 4);
|
||||
return;
|
||||
}
|
||||
}
|
||||
auto cond = [&em_address](const TBreakPoint& bp) { return bp.iAddress == em_address; };
|
||||
auto it = std::find_if(m_BreakPoints.begin(), m_BreakPoints.end(), cond);
|
||||
if (it != m_BreakPoints.end())
|
||||
m_BreakPoints.erase(it);
|
||||
}
|
||||
|
||||
void BreakPoints::Clear()
|
||||
|
@ -106,7 +102,7 @@ void BreakPoints::Clear()
|
|||
// }
|
||||
// );
|
||||
//}
|
||||
|
||||
|
||||
m_BreakPoints.clear();
|
||||
}
|
||||
|
||||
|
@ -118,10 +114,10 @@ MemChecks::TMemChecksStr MemChecks::GetStrings() const
|
|||
std::stringstream mc;
|
||||
mc << std::hex << memcheck.StartAddress;
|
||||
mc << " " << (memcheck.bRange ? memcheck.EndAddress : memcheck.StartAddress) << " "
|
||||
<< (memcheck.bRange ? "n" : "")
|
||||
<< (memcheck.OnRead ? "r" : "")
|
||||
<< (memcheck.OnWrite ? "w" : "")
|
||||
<< (memcheck.Log ? "l" : "")
|
||||
<< (memcheck.bRange ? "n" : "")
|
||||
<< (memcheck.OnRead ? "r" : "")
|
||||
<< (memcheck.OnWrite ? "w" : "")
|
||||
<< (memcheck.Log ? "l" : "")
|
||||
<< (memcheck.Break ? "p" : "");
|
||||
mcs.push_back(mc.str());
|
||||
}
|
||||
|
@ -150,22 +146,18 @@ void MemChecks::AddFromStrings(const TMemChecksStr& mcs)
|
|||
}
|
||||
}
|
||||
|
||||
void MemChecks::Add(const TMemCheck& _rMemoryCheck)
|
||||
void MemChecks::Add(const TMemCheck& rMemoryCheck)
|
||||
{
|
||||
if (GetMemCheck(_rMemoryCheck.StartAddress) == 0)
|
||||
m_MemChecks.push_back(_rMemoryCheck);
|
||||
if (GetMemCheck(rMemoryCheck.StartAddress) == 0)
|
||||
m_MemChecks.push_back(rMemoryCheck);
|
||||
}
|
||||
|
||||
void MemChecks::Remove(u32 _Address)
|
||||
void MemChecks::Remove(u32 Address)
|
||||
{
|
||||
for (auto i = m_MemChecks.begin(); i != m_MemChecks.end(); ++i)
|
||||
{
|
||||
if (i->StartAddress == _Address)
|
||||
{
|
||||
m_MemChecks.erase(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
auto cond = [&Address](const TMemCheck& mc) { return mc.StartAddress == Address; };
|
||||
auto it = std::find_if(m_MemChecks.begin(), m_MemChecks.end(), cond);
|
||||
if (it != m_MemChecks.end())
|
||||
m_MemChecks.erase(it);
|
||||
}
|
||||
|
||||
TMemCheck *MemChecks::GetMemCheck(u32 address)
|
||||
|
|
|
@ -14,32 +14,33 @@ class DebugInterface;
|
|||
|
||||
struct TBreakPoint
|
||||
{
|
||||
u32 iAddress;
|
||||
bool bOn;
|
||||
bool bTemporary;
|
||||
u32 iAddress;
|
||||
bool bOn;
|
||||
bool bTemporary;
|
||||
};
|
||||
|
||||
struct TMemCheck
|
||||
{
|
||||
TMemCheck() {
|
||||
numHits = 0;
|
||||
StartAddress = EndAddress = 0;
|
||||
bRange = OnRead = OnWrite = Log = Break = false;
|
||||
}
|
||||
u32 StartAddress;
|
||||
u32 EndAddress;
|
||||
TMemCheck():
|
||||
StartAddress(0), EndAddress(0),
|
||||
bRange(false), OnRead(false), OnWrite(false),
|
||||
Log(false), Break(false), numHits(0)
|
||||
{ }
|
||||
|
||||
bool bRange;
|
||||
u32 StartAddress;
|
||||
u32 EndAddress;
|
||||
|
||||
bool OnRead;
|
||||
bool OnWrite;
|
||||
bool bRange;
|
||||
|
||||
bool Log;
|
||||
bool Break;
|
||||
bool OnRead;
|
||||
bool OnWrite;
|
||||
|
||||
u32 numHits;
|
||||
bool Log;
|
||||
bool Break;
|
||||
|
||||
void Action(DebugInterface *dbg_interface, u32 _iValue, u32 addr,
|
||||
u32 numHits;
|
||||
|
||||
void Action(DebugInterface *dbg_interface, u32 iValue, u32 addr,
|
||||
bool write, int size, u32 pc);
|
||||
};
|
||||
|
||||
|
@ -56,22 +57,22 @@ public:
|
|||
void AddFromStrings(const TBreakPointsStr& bps);
|
||||
|
||||
// is address breakpoint
|
||||
bool IsAddressBreakPoint(u32 _iAddress);
|
||||
bool IsTempBreakPoint(u32 _iAddress);
|
||||
bool IsAddressBreakPoint(u32 iAddress);
|
||||
bool IsTempBreakPoint(u32 iAddress);
|
||||
|
||||
// Add BreakPoint
|
||||
void Add(u32 em_address, bool temp=false);
|
||||
void Add(const TBreakPoint& bp);
|
||||
|
||||
// Remove Breakpoint
|
||||
void Remove(u32 _iAddress);
|
||||
void Remove(u32 iAddress);
|
||||
void Clear();
|
||||
|
||||
void DeleteByAddress(u32 _Address);
|
||||
void DeleteByAddress(u32 Address);
|
||||
|
||||
private:
|
||||
TBreakPoints m_BreakPoints;
|
||||
u32 m_iBreakOnCount;
|
||||
u32 m_iBreakOnCount;
|
||||
};
|
||||
|
||||
|
||||
|
@ -89,7 +90,7 @@ public:
|
|||
TMemChecksStr GetStrings() const;
|
||||
void AddFromStrings(const TMemChecksStr& mcs);
|
||||
|
||||
void Add(const TMemCheck& _rMemoryCheck);
|
||||
void Add(const TMemCheck& rMemoryCheck);
|
||||
|
||||
// memory breakpoint
|
||||
TMemCheck *GetMemCheck(u32 address);
|
||||
|
@ -99,4 +100,3 @@ public:
|
|||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue