mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
PDB debugger: watches are remembered, Clear all watches function, Drag&Drop to watches
git-svn-id: svn://ultimatepp.org/upp/trunk@967 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
8f1cbba464
commit
c271c33440
11 changed files with 144 additions and 36 deletions
|
|
@ -501,6 +501,35 @@ void StaticSemaphore::Initialize()
|
|||
BarrierWrite(semaphore, new(buffer) Semaphore);
|
||||
}
|
||||
|
||||
void LazyUpdate::Invalidate()
|
||||
{
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
bool LazyUpdate::BeginUpdate() const
|
||||
{
|
||||
bool b = dirty;
|
||||
ReadMemoryBarrier();
|
||||
if(b) {
|
||||
mutex.Enter();
|
||||
if(dirty) return true;
|
||||
mutex.Leave();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void LazyUpdate::EndUpdate() const
|
||||
{
|
||||
WriteMemoryBarrier();
|
||||
dirty = false;
|
||||
mutex.Leave();
|
||||
}
|
||||
|
||||
LazyUpdate::LazyUpdate()
|
||||
{
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -364,6 +364,22 @@ public:
|
|||
void LeaveWrite() { Get().LeaveWrite(); }
|
||||
};
|
||||
|
||||
class StaticConditionVariable : NoCopy {
|
||||
volatile ConditionVariable *cv;
|
||||
byte buffer[sizeof(ConditionVariable)];
|
||||
|
||||
void Initialize();
|
||||
|
||||
public:
|
||||
ConditionVariable& Get() { if(!ReadWithBarrier(cv)) Initialize(); return *const_cast<ConditionVariable *>(cv); }
|
||||
operator ConditionVariable&() { return Get(); }
|
||||
|
||||
void Wait(Mutex& m) { Get().Wait(m); }
|
||||
|
||||
void Signal() { Get().Signal(); }
|
||||
void Broadcast() { Get().Broadcast(); }
|
||||
};
|
||||
|
||||
#define INTERLOCKED \
|
||||
for(bool i_b_ = true; i_b_;) \
|
||||
for(static UPP::StaticMutex i_ss_; i_b_;) \
|
||||
|
|
@ -397,6 +413,18 @@ if(!ReadWithBarrier(ptr)) { \
|
|||
cs.Leave(); \
|
||||
}
|
||||
|
||||
struct LazyUpdate {
|
||||
mutable Mutex mutex;
|
||||
mutable bool dirty;
|
||||
|
||||
public:
|
||||
void Invalidate();
|
||||
bool BeginUpdate() const;
|
||||
void EndUpdate() const;
|
||||
|
||||
LazyUpdate();
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
#define thread__
|
||||
|
|
|
|||
|
|
@ -448,7 +448,7 @@ FileSel& OutputFs();
|
|||
Image IdeFileImage(const String& filename, bool fast = false);
|
||||
|
||||
void RegisterWorkspaceConfig(const char *name);
|
||||
void RegisterWorkspaceConfig(const char *name, Callback WhenFlush);
|
||||
void RegisterNWorkspaceConfig(const char *name, Callback WhenFlush);
|
||||
String& WorkspaceConfigData(const char *name);
|
||||
|
||||
template <class T>
|
||||
|
|
|
|||
|
|
@ -533,10 +533,25 @@ void Pdb::SetTab(int i)
|
|||
Tab();
|
||||
}
|
||||
|
||||
void Pdb::ClearWatches()
|
||||
{
|
||||
watches.Clear();
|
||||
}
|
||||
|
||||
void Pdb::AddWatch()
|
||||
{
|
||||
SetTab(2);
|
||||
watches.DoAppend();
|
||||
}
|
||||
|
||||
void Pdb::DropWatch(PasteClip& clip)
|
||||
{
|
||||
String s = StringStream(GetString(clip)).GetLine();
|
||||
if(s.GetCount()) {
|
||||
watches.Add(s);
|
||||
clip.SetAction(DND_COPY);
|
||||
Data();
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -157,7 +157,6 @@ struct Gdb : Dbg {
|
|||
void Watches();
|
||||
void Autos();
|
||||
void Data();
|
||||
|
||||
void QuickWatch();
|
||||
|
||||
void CopyStack();
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ void Pdb::DebugBar(Bar& bar)
|
|||
bar.Add(b, AK_AUTOS, THISBACK1(SetTab, 0));
|
||||
bar.Add(b, AK_LOCALS, THISBACK1(SetTab, 1));
|
||||
bar.Add(b, AK_WATCHES, THISBACK1(SetTab, 2));
|
||||
bar.Add(b, AK_CLEARWATCHES, THISBACK(ClearWatches));
|
||||
bar.Add(b, AK_ADDWATCH, THISBACK(AddWatch));
|
||||
bar.Add(b, AK_EXPLORER, THISBACK(DoExplorer));
|
||||
bar.Add(b, AK_MEMORY, THISBACK1(SetTab, 4));
|
||||
|
|
@ -94,6 +95,7 @@ bool Pdb::Create(One<Host> local, const String& exefile, const String& cmdline)
|
|||
cl << exefile;
|
||||
if(!IsNull(cmdline))
|
||||
cl << ' ' << cmdline;
|
||||
|
||||
Buffer<char> cmd(cl.GetLength() + 1);
|
||||
memcpy(cmd, cl, cl.GetLength() + 1);
|
||||
PROCESS_INFORMATION pi;
|
||||
|
|
@ -134,6 +136,26 @@ bool Pdb::Create(One<Host> local, const String& exefile, const String& cmdline)
|
|||
return true;
|
||||
}
|
||||
|
||||
INITBLOCK {
|
||||
RegisterWorkspaceConfig("pdb-debugger");
|
||||
}
|
||||
|
||||
void Pdb::SerializeSession(Stream& s)
|
||||
{
|
||||
int version = 0;
|
||||
s / version;
|
||||
int n = watches.GetCount();
|
||||
s / n;
|
||||
for(int i = 0; i < n; i++) {
|
||||
String w;
|
||||
if(s.IsStoring())
|
||||
w = watches.Get(i, 0);
|
||||
s % w;
|
||||
if(s.IsLoading())
|
||||
watches.Add(w);
|
||||
}
|
||||
}
|
||||
|
||||
Pdb::Pdb()
|
||||
{
|
||||
hProcess = INVALID_HANDLE_VALUE;
|
||||
|
|
@ -226,6 +248,7 @@ Pdb::Pdb()
|
|||
threadlist <<= THISBACK(SetThread);
|
||||
|
||||
watches.WhenAcceptEdit = THISBACK(Data);
|
||||
watches.WhenDrop = THISBACK(DropWatch);
|
||||
tab <<= THISBACK(Data);
|
||||
|
||||
tree.WhenOpen = THISBACK(TreeExpand);
|
||||
|
|
@ -236,6 +259,8 @@ Pdb::Pdb()
|
|||
String desc = in.GetLine();
|
||||
treetype.Add(type, desc);
|
||||
}
|
||||
StringStream ss(WorkspaceConfigData("pdb-debugger"));
|
||||
Load(callback(this, &Pdb::SerializeSession), ss);
|
||||
}
|
||||
|
||||
void Pdb::CleanupOnExit()
|
||||
|
|
@ -270,6 +295,9 @@ Pdb::~Pdb()
|
|||
FileOut out(fn);
|
||||
for(int i = 0; i < treetype.GetCount(); i++)
|
||||
out << treetype.GetKey(i) << "\r\n" << treetype[i] << "\r\n";
|
||||
StringStream ss;
|
||||
Store(callback(this, &Pdb::SerializeSession), ss);
|
||||
WorkspaceConfigData("pdb-debugger") = ss;
|
||||
if(hProcess != INVALID_HANDLE_VALUE) {
|
||||
if(!running)
|
||||
ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_CONTINUE);
|
||||
|
|
@ -290,11 +318,9 @@ Pdb::~Pdb()
|
|||
|
||||
One<Debugger> PdbCreate(One<Host> host, const String& exefile, const String& cmdline)
|
||||
{
|
||||
Pdb *dbg = new Pdb;
|
||||
if(!dbg->Create(host, exefile, cmdline)) {
|
||||
delete dbg;
|
||||
return NULL;
|
||||
}
|
||||
One<Debugger> dbg;
|
||||
if(!dbg.Create<Pdb>().Create(host, exefile, cmdline))
|
||||
dbg.Clear();
|
||||
return dbg;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -314,6 +314,8 @@ struct Pdb : Debugger, ParentCtrl {
|
|||
void ExplorerTree();
|
||||
void Data();
|
||||
void AddWatch();
|
||||
void ClearWatches();
|
||||
void DropWatch(PasteClip& clip);
|
||||
void SetTab(int i);
|
||||
|
||||
void SetTree(const String& exp);
|
||||
|
|
@ -342,6 +344,8 @@ struct Pdb : Debugger, ParentCtrl {
|
|||
|
||||
bool Create(One<Host> host, const String& exefile, const String& cmdline);
|
||||
|
||||
void SerializeSession(Stream& s);
|
||||
|
||||
typedef Pdb CLASSNAME;
|
||||
|
||||
Pdb();
|
||||
|
|
|
|||
|
|
@ -10,5 +10,6 @@ KEY(AUTOS, "Autos", K_SHIFT_F6)
|
|||
KEY(LOCALS, "Locals", K_SHIFT_F7)
|
||||
KEY(WATCHES, "Watches", K_SHIFT_F8)
|
||||
KEY(ADDWATCH, "Add watch", K_CTRL|K_SHIFT_F8)
|
||||
KEY(CLEARWATCHES, "Clear watches", K_ALT|K_SHIFT_F8)
|
||||
KEY(EXPLORER, "Explorer", K_SHIFT_F9)
|
||||
KEY(MEMORY, "Memory", K_SHIFT_F10)
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ SvnDiff::SvnDiff()
|
|||
{
|
||||
r.Height(EditField::GetStdHeight());
|
||||
r.SetDropLines(32);
|
||||
Icon(IdeImg::Diff());
|
||||
Icon(IdeImg::SvnDiff());
|
||||
diff.AddFrameRight(r);
|
||||
r <<= THISBACK(Load);
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
|
@ -70,6 +70,8 @@ IMAGE_ID(tpp_doc)
|
|||
IMAGE_ID(svn)
|
||||
IMAGE_ID(svn_dir)
|
||||
IMAGE_ID(Diff)
|
||||
IMAGE_ID(SvnDiff)
|
||||
IMAGE_ID(DiffDiff)
|
||||
|
||||
IMAGE_BEGIN_DATA
|
||||
IMAGE_DATA(120,156,237,152,77,210,155,48,12,134,125,129,206,124,187,206,116,213,235,244,84,229,68,61,67,206,145,35,116,217,46,187)
|
||||
|
|
@ -3861,31 +3863,35 @@ IMAGE_DATA(25,114,248,31,15,161,22,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|||
IMAGE_END_DATA(5568, 20)
|
||||
|
||||
IMAGE_BEGIN_DATA
|
||||
IMAGE_DATA(120,156,237,152,77,72,84,81,20,199,255,205,48,229,104,198,168,16,20,102,182,81,178,152,160,113,145,181,80,41,146,104)
|
||||
IMAGE_DATA(166,93,144,8,65,57,234,40,54,162,11,83,196,102,52,148,17,26,112,215,8,10,130,52,193,108,163,69,139,72,200,221)
|
||||
IMAGE_DATA(91,8,182,114,167,110,92,20,68,228,66,87,175,123,223,155,247,53,243,238,251,28,179,196,51,252,97,222,225,252,206,185)
|
||||
IMAGE_DATA(247,188,119,46,243,6,1,4,80,74,27,158,203,242,78,164,230,121,30,26,229,114,57,222,200,116,249,93,162,20,209,176)
|
||||
IMAGE_DATA(194,39,18,9,89,210,181,46,79,217,78,162,38,45,111,171,62,173,221,94,204,235,173,65,183,62,173,189,236,112,255,169)
|
||||
IMAGE_DATA(60,79,215,177,238,96,255,77,80,180,236,160,126,187,88,87,224,119,139,249,194,117,20,241,235,170,254,57,189,255,237,249)
|
||||
IMAGE_DATA(28,188,195,251,223,148,223,131,147,250,203,170,254,235,212,47,236,67,33,239,102,126,92,89,169,15,3,98,188,67,201,188)
|
||||
IMAGE_DATA(93,211,227,145,255,80,11,133,66,76,89,225,221,214,23,99,146,178,172,240,110,247,47,153,209,190,255,70,125,39,188,203)
|
||||
IMAGE_DATA(231,167,208,88,249,173,154,27,158,21,107,53,135,91,222,158,157,45,253,97,112,212,246,208,64,250,241,205,205,138,66,33)
|
||||
IMAGE_DATA(81,70,241,82,140,90,199,57,222,94,63,61,12,255,191,111,199,112,24,114,208,63,57,115,140,120,62,56,57,201,69,51)
|
||||
IMAGE_DATA(25,174,117,102,134,11,196,227,156,183,175,143,3,251,228,225,105,236,135,213,85,238,197,210,18,119,157,176,101,3,3,134)
|
||||
IMAGE_DATA(241,109,179,179,66,108,56,157,230,26,199,199,57,191,73,124,21,89,195,13,146,247,234,196,4,119,97,100,132,59,221,223)
|
||||
IMAGE_DATA(111,24,239,139,197,56,202,84,15,13,113,21,131,131,166,235,71,111,175,16,67,229,161,177,228,218,32,222,110,63,255,95)
|
||||
IMAGE_DATA(11,224,156,174,255,50,240,35,74,111,60,81,68,220,252,51,32,26,21,21,12,154,229,125,68,120,158,254,100,32,250,42)
|
||||
IMAGE_DATA(243,27,27,192,230,38,176,189,13,100,50,64,101,165,61,158,90,85,21,16,143,3,123,123,64,54,203,226,189,192,66,57)
|
||||
IMAGE_DATA(240,142,170,140,136,184,90,181,17,45,45,192,206,14,48,61,173,113,123,224,67,13,174,224,148,149,19,110,113,17,216,218)
|
||||
IMAGE_DATA(2,106,107,101,215,61,140,99,158,172,183,5,61,230,124,77,141,184,197,134,6,225,50,130,57,164,113,32,240,111,176,143)
|
||||
IMAGE_DATA(187,24,101,179,29,29,64,87,151,200,199,98,4,142,224,26,194,184,131,152,192,223,68,39,26,113,159,205,143,146,220,251)
|
||||
IMAGE_DATA(251,34,127,112,0,164,82,130,251,60,161,40,95,142,106,243,245,247,244,136,252,216,152,236,10,224,18,94,97,11,79,176)
|
||||
IMAGE_DATA(104,206,123,72,143,235,235,1,159,79,227,126,128,215,72,98,7,245,184,93,0,180,193,239,207,162,162,66,148,215,187,192)
|
||||
IMAGE_DATA(76,253,20,239,73,55,127,147,187,62,4,191,124,226,63,199,218,154,242,111,68,36,242,157,201,159,65,37,30,227,45,18)
|
||||
IMAGE_DATA(216,198,4,54,241,18,223,108,241,146,93,68,16,183,208,45,136,242,225,48,143,238,110,81,117,117,90,254,100,24,205,135)
|
||||
IMAGE_DATA(49,153,4,79,85,92,197,124,24,41,39,189,200,75,121,148,92,230,195,168,102,212,121,172,14,163,154,211,242,214,134,145)
|
||||
IMAGE_DATA(205,83,179,54,140,234,61,104,251,120,50,140,154,216,67,248,3,197,141,153,188,36,39,77,4,254,243,212,148,174,36,62)
|
||||
IMAGE_DATA(61,255,69,87,135,193,171,175,213,60,253,110,198,235,229,82,215,47,204,161,230,205,251,168,232,48,234,151,98,255,197,181)
|
||||
IMAGE_DATA(217,253,87,158,141,98,158,250,126,174,172,48,121,234,255,248,233,23,115,253,148,101,241,18,171,230,93,62,191,71,106,127)
|
||||
IMAGE_DATA(0,14,214,9,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
|
||||
IMAGE_END_DATA(864, 7)
|
||||
IMAGE_DATA(120,156,237,152,79,72,20,81,28,199,191,41,91,254,201,88,21,130,194,204,46,74,22,27,180,30,178,14,42,69,18,185)
|
||||
IMAGE_DATA(221,2,69,8,202,127,171,216,138,30,76,17,115,49,20,133,22,188,181,130,130,151,12,246,26,29,58,181,144,183,57,8)
|
||||
IMAGE_DATA(118,242,182,122,241,80,151,200,131,158,166,247,102,118,118,223,236,190,55,111,118,102,183,77,241,183,124,97,231,241,251,252)
|
||||
IMAGE_DATA(126,239,253,102,126,63,118,7,94,120,145,79,27,95,222,84,157,136,229,85,21,38,197,98,49,213,202,184,252,1,209,18)
|
||||
IMAGE_DATA(209,120,154,159,155,155,75,201,184,230,242,148,237,33,106,54,243,57,229,167,185,59,178,121,222,30,184,249,105,238,13,135)
|
||||
IMAGE_DATA(231,95,74,242,116,31,219,14,206,223,140,180,54,28,228,239,208,243,106,252,65,54,159,185,143,44,126,155,169,159,211,251)
|
||||
IMAGE_DATA(223,145,140,161,58,188,255,205,201,51,56,201,191,193,212,159,147,63,179,14,153,188,155,254,113,101,249,30,6,196,84,135)
|
||||
IMAGE_DATA(74,241,185,26,143,71,242,67,205,239,247,11,101,135,119,155,95,247,9,167,100,135,119,123,126,195,172,206,253,47,242,59)
|
||||
IMAGE_DATA(225,93,62,63,153,38,138,111,215,220,240,34,95,187,49,220,242,185,217,197,252,15,131,98,219,83,11,241,253,91,90,210)
|
||||
IMAGE_DATA(242,251,117,89,249,27,62,172,78,179,127,110,245,44,17,172,255,255,118,10,155,33,6,254,228,140,9,252,85,223,236,172)
|
||||
IMAGE_DATA(210,31,141,42,109,11,11,138,55,20,82,74,135,134,20,136,39,143,74,125,63,199,227,202,235,245,117,229,54,97,203,70)
|
||||
IMAGE_DATA(70,44,253,219,23,23,53,223,174,72,68,105,154,158,86,202,37,254,213,100,15,119,72,220,155,51,51,202,149,137,9,229)
|
||||
IMAGE_DATA(252,240,176,165,191,39,24,84,40,83,51,54,166,84,142,142,74,247,143,193,65,205,135,170,132,250,146,107,11,255,92,235)
|
||||
IMAGE_DATA(121,114,205,139,75,220,245,235,192,175,126,122,227,137,2,250,225,95,2,253,253,186,124,62,89,220,103,132,87,233,79,6)
|
||||
IMAGE_DATA(162,239,41,126,103,7,216,221,5,246,246,128,104,20,168,170,202,141,167,86,93,13,132,66,192,225,33,176,185,41,226,75)
|
||||
IMAGE_DATA(129,213,10,224,35,85,25,17,89,106,51,123,180,182,2,251,251,192,252,188,105,185,4,30,212,226,6,206,217,153,112,107)
|
||||
IMAGE_DATA(107,64,34,1,212,213,165,150,30,97,26,43,100,191,173,24,144,243,181,181,250,17,27,27,181,203,0,150,17,193,177,198)
|
||||
IMAGE_DATA(191,199,17,30,98,82,204,118,118,2,189,189,58,31,12,18,56,128,91,232,194,3,4,53,254,46,122,208,132,199,98,126)
|
||||
IMAGE_DATA(146,196,62,58,210,249,227,99,96,105,73,91,190,76,40,202,87,160,70,190,255,129,1,157,159,154,74,45,121,113,13,111)
|
||||
IMAGE_DATA(145,64,55,214,228,124,9,169,113,67,3,224,241,152,150,159,224,29,194,216,71,3,238,103,0,237,40,47,223,68,101,165)
|
||||
IMAGE_DATA(174,210,210,85,97,232,23,248,68,170,249,135,220,245,49,148,167,38,254,43,108,109,165,223,70,4,2,63,133,252,5,84)
|
||||
IMAGE_DATA(225,57,62,96,14,123,152,193,46,222,224,71,78,188,97,87,225,195,61,244,105,162,124,87,151,138,190,62,93,245,245,102)
|
||||
IMAGE_DATA(254,172,25,229,205,24,14,67,165,202,206,34,111,70,202,25,127,228,141,56,233,88,242,102,100,25,54,142,221,102,100,57)
|
||||
IMAGE_DATA(51,111,175,25,197,60,53,123,205,200,158,193,92,199,179,102,52,249,22,224,5,138,27,147,252,73,14,75,4,53,145,72)
|
||||
IMAGE_DATA(112,101,240,145,149,111,92,21,130,103,175,89,158,126,151,241,188,88,108,254,204,24,44,47,175,99,90,133,200,159,143,243)
|
||||
IMAGE_DATA(103,231,22,215,63,253,108,100,243,116,45,30,143,11,121,186,254,229,235,111,225,254,41,43,226,13,150,229,93,62,191,197)
|
||||
IMAGE_DATA(181,147,52,12,188,221,94,75,65,210,204,154,143,224,83,8,158,189,54,241,144,243,188,88,166,252,16,243,178,58,154,84)
|
||||
IMAGE_DATA(128,252,249,56,63,111,24,8,235,15,49,15,102,24,112,121,232,111,127,69,251,103,135,65,22,143,244,155,99,131,119,249)
|
||||
IMAGE_DATA(252,22,215,78,210,48,8,75,4,73,51,83,31,85,160,66,240,236,53,203,195,6,207,139,197,230,207,140,193,242,178,58)
|
||||
IMAGE_DATA(178,42,68,254,124,156,159,55,12,68,245,135,5,15,102,24,240,120,109,61,28,22,238,159,29,6,153,124,138,101,120,151)
|
||||
IMAGE_DATA(207,111,81,237,47,216,243,53,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
|
||||
IMAGE_END_DATA(992, 9)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue