LTCD_060719.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:17 +02:00
commit f86e69648b
156 files changed
+49537

No files matched your search

+207
View File
@@ -0,0 +1,207 @@
ClassStruct *DbgFindFun(Ltf *l,I8 line_offset=0)
{
I1 st[256],st2[256],*filename=l->filename.name;
I8 line=l->cur_entry->y+1+line_offset;
U8 i;
SysHashEntry *temph;
SysHashTable *h=Fs->hash_table;
ClassStruct *tempc;
DbgInfo *tempd;
while (h) {
for (i=0;i<=h->mask;i++) {
temph=h->body[i];
while (temph) {
if (temph->type&HTT_FUNCTION) {
tempc=temph;
if (tempd=tempc->debug) {
StrCpy(st,tempc->source_link);
RemoveFirstSeg(st,":",st2);
RemoveLastSeg(st,",",st2);
if (!StrCmp(st,filename)) {
if (line>=tempd->min_line && line<=tempd->max_line)
return tempc;
}
}
}
temph=temph->next;
}
}
h=h->next;
}
return NULL;
}
void WatchLocals()
{
TssStruct *tss=Fs->parent_tss,*dbg_tss=tss->dbg_tss;
Ltf *l;
ClassStruct *tempc;
U8 j,sc,ch;
while (TRUE) {
// PutS("$$CL$$");
LtfBottom(Fs->cur_ltf);
if (l=dbg_tss->cur_ltf) {
if (tempc=DbgFindFun(l,0)) {
Preempt(OFF);
ClassRep2(Fs->cur_ltf,tss->ebp,tempc->string,0,HTT_FUNCTION);
Preempt(ON);
}
}
if (ScanChar(&sc,&ch)) {
j=jiffies+JIFFY_FREQ*5;
LtfPutChar(Fs->cur_ltf,ch,sc,TRUE);
do {
if (ch==CH_CTRLQ || ch==CH_ESC) Exit;
if (ScanChar(&sc,&ch)) {
j=jiffies+JIFFY_FREQ*5;
LtfPutChar(Fs->cur_ltf,ch,sc,TRUE);
}
Sleep(100);
} while (jiffies<j);
} else
Sleep(100);
}
}
void Dbg()
{
// TssStruct *tss;
Fs->dbg_tss=Spawn(&UserCmdLine,"Debug",Fs);
/*** Not ready for prime time
tss=Spawn(&ServantUserCmdLine,"WATCH TASK",Fs);
while (!Bt(&tss->task_flags,TSSf_IDLE))
SwapInNext;
Bts(&tss->crt_flags,CRTf_SHOW);
QueueTaskRequest(tss,Fs,"WatchLocals;",(1<<TSSCf_EXIT_ON_COMPLETE));
****/
}
void ToggleBpt(Ltf *l,I8 line_offset=0,U8 flags=SBPTF_BPT)
{
I1 st[256],st2[256],*filename=l->filename.name;
I8 line=l->cur_entry->y+1+line_offset;
SysHashEntry *temph;
SysHashTable *h=Fs->hash_table;
ClassStruct *tempc;
U8 i,a;
DbgInfo *tempd;
LtfEntry *ll;
while (h) {
for (i=0;i<=h->mask;i++) {
temph=h->body[i];
while (temph) {
if (temph->type&HTT_FUNCTION) {
tempc=temph;
if (tempd=tempc->debug) {
StrCpy(st,tempc->source_link);
RemoveFirstSeg(st,":",st2);
RemoveLastSeg(st,",",st2);
if (!StrCmp(st,filename)) {
if (line>=tempd->min_line && line<=tempd->max_line) {
a=tempd->body[line-tempd->min_line];
ll=l->cur_entry;
while (ll->last->btype!=LTFT_CR &&
ll->last->btype!=LTFT_SOFT_CR &&
ll->last!=l)
ll=ll->last;
l->cur_entry=ll;
l->cur_data_col=ll->min_col;
if (flags==SBPTF_BPT) {
if (!RBpt(Fs->parent_tss,a)) {
SBpt(Fs->parent_tss,a,flags);
Auto("$$BP$$");
} else {
if (ll->btype==LTFT_BPT) {
l->cur_entry=ll->next;
l->cur_data_col=l->cur_entry->min_col;
RemQue(ll);
LtfDelEntry(ll,l->mem_tss);
}
}
} else {
if (!FindBpt(Fs->parent_tss,a,ALL_MASK,FALSE))
SBpt(Fs->parent_tss,a,flags);
}
if (line_offset) {
l->x=0;
l->y=line-1;
LtfUpdateWindowJoin(l,FALSE,FALSE,FALSE,TRUE);
}
return;
}
}
}
}
temph=temph->next;
}
}
h=h->next;
}
}
void ClearAllBpts(Ltf *l)
{
LtfEntry *ll,*ll2;
CBpt(Fs->parent_tss);
ll=l->dummy.next;
while (ll!=l) {
ll2=ll->next;
if (ll->btype==LTFT_BPT) {
if (l->cur_entry==ll) {
l->cur_entry=ll->next;
l->cur_data_col=l->cur_entry->min_col;
}
RemQue(ll);
LtfDelEntry(ll,l->mem_tss);
}
ll=ll2;
}
}
void LtfGo() //Continue after breakpoint
{
TssStruct *tss=Fs->parent_tss;
U4 *eip=&tss->eip;
CBpt(tss,SBPTF_STEP);
*eip-=1;
DBpt(tss,*eip);
Btr(&tss->task_flags,TSSf_SUSPENDED);
}
public void Go() //Continue after breakpoint
{
LtfGo;
Exit;
}
public void Step() //Single step (ASM)
{
TssStruct *tss=Fs->parent_tss;
U4 *eip=&tss->eip;
I1 buf[256];
U8 my_eip;
CBpt(tss,SBPTF_STEP);
*eip-=1;
DBpt(tss,*eip);
my_eip=*eip;
DasmIns(buf,&my_eip); //get addr of next ins start
SBpt(tss,my_eip,SBPTF_STEP);
Btr(&tss->task_flags,TSSf_SUSPENDED);
Exit;
}
void LtfStep(Ltf *l) //Single step
{
TssStruct *tss=Fs->parent_tss;
U4 *eip=&tss->eip;
CBpt(tss,SBPTF_STEP);
*eip-=1;
DBpt(tss,*eip);
ToggleBpt(l,1,SBPTF_STEP);
Btr(&tss->task_flags,TSSf_SUSPENDED);
}