Commit 2ae9d4cc authored by Denis Budyak's avatar Denis Budyak

Починил отладчик в двух местах:

* если процедура не найдена, избегаем добавления глупых точек остановки в предыдущую процедуру
* находить процедуру @Body, которая сейчас называется @Body, а не $$
parent 56cf7a13
WMDebugger.Open TestTFPET.Mod~
WMDebugger.Open TestTFPET.Mod ~
TestTFPET.EchoGetAString ~
System.FreeDownTo WMDebugger BtDTraps ~
System.FreeDownTo TestTFPET UCS32StringJQMaker ~
......@@ -10,7 +10,7 @@ IMPORT
WMTextView:=WMTextView2, Texts, TextUtilities, (* WMEditors, *) Streams,
WMTabComponents,
BtDTraps, BtMenus, WMTrees, BtDbgPanel, WMComboBox,
CompilerInterface, WMDiagnostics, BtDecoder, PodrobnajaPechatq;
CompilerInterface, WMDiagnostics, BtDecoder, PodrobnajaPechatq, rrr := r;
CONST
Trace = TRUE;
CONST
......@@ -155,6 +155,7 @@ TYPE
KernelLog.Int(pos,0); KernelLog.String(",pc="); KernelLog.Int(pc,0); KernelLog.Ln;
NEW(h); h.next := curPI.posList; curPI.posList := h;h.BrkState:={}; (*Add to proc info*)
h.pos:=pos;
ASSERT(pc # 15);
h.pc:=pc;
IF nofmi = LEN(mi) THEN Grow END; (*Add to module info*)
......@@ -310,7 +311,7 @@ TYPE
KernelLog.String(cur.name); KernelLog.Ln; cur:=cur.next END;
IF cur=NIL THEN RETURN FALSE END;
KernelLog.String("FindPCinProc: might match: ");
KernelLog.String(cur.name); KernelLog.Ln;
rrr.PechKL(cur);
pi:=cur.posList;
WHILE (pi#NIL)&(pi.pc#pc)DO
KernelLog.String("FindPCinProc: position in proc does not match:");
......@@ -1523,8 +1524,13 @@ BEGIN
WHILE (name[i]#0X)&(name[i]#".") DO mn[i]:=name[i];INC(i) END;
INC(i);
WHILE (name[i]#0X) DO pn[j]:=name[i];INC(i);INC(j) END;
KernelLog.String("GetProcOffset: pn = ");
KernelLog.String(pn);
KernelLog.String("mn = ");
KernelLog.String(mn);
KernelLog.Ln;
IF pn="@Body" THEN
BtDTraps.GetProcedure(mn,"$$",adr);
BtDTraps.GetProcedure(mn,"@Body" (* "$$" *),adr);
ELSE
BtDTraps.GetProcedure(mn,pn,adr);
END;
......@@ -1570,7 +1576,8 @@ m - pointer to the module debug infomation
RETURN equals;
END Equals;*)
PROCEDURE SearchEnd(VAR from: SIGNED32;adr:ADDRESS):SIGNED32;
(* Здесь был поиск выхода из процедуры по образцу, но сейчас он всё равно не работает, поэтому его отключили
PROCEDURE SearchEnd(VAR from: SIGNED32;adr:ADDRESS):UNSIGNED32;
VAR
(* pos:SIGNED32;
ch : Texts.Char32; *)
......@@ -1590,7 +1597,7 @@ m - pointer to the module debug infomation
WHILE SYSTEM.GET32(adr)#0C35DEC89H DO INC(adr) END;(*Find first: MOV ESP, EBP; POP EBP; RET*)
*)
RETURN adr;
END SearchEnd;
END SearchEnd; *)
BEGIN
NEW(utilreader, text);
......@@ -1608,8 +1615,8 @@ m - pointer to the module debug infomation
GetProcOffset(buf,offset);
IF offset # 0 THEN
IF curPI#NIL THEN (* flush previous *)
curPI.lastOfs:=SearchEnd(pos,pc+offset);
m.AddPos(curPI, pos, curPI.lastOfs)
(* curPI.lastOfs:=SearchEnd(pos,pc+offset);
m.AddPos(curPI, pos, curPI.lastOfs) *)
END;
curPI:=m.AddProc(buf);
curPI.startOfs:=offset;
......@@ -1629,7 +1636,11 @@ m - pointer to the module debug infomation
IF pc=0 THEN
pos:=SearchBegin(pos);
END; *)
m.AddPos(curPI, pos, pc+offset);
IF offset # 0 THEN
(* offset # 0, когда эта процедура найдена *)
m.AddPos(curPI, pos, pc+offset);
curPI.lastOfs := SYSTEM.VAL(ADDRESS,MAX(SYSTEM.VAL(UNSIGNED32,curPI.lastOfs),SYSTEM.VAL(UNSIGNED32,pc+offset)));
END
ELSIF ch=0X THEN
ELSE
HALT(18);(*panic, file unknow format*)
......@@ -1640,7 +1651,9 @@ m - pointer to the module debug infomation
curPI.lastOfs:=pc+offset;
END;
*)
m.Sort;
rrr.PechKL(m);
(* m.mod := Modules.ThisModuleByAdr(pc+offset); *)
IF m.mod = NIL THEN
KernelLog.String("LoadModulePosInfo: ne udalosq opredelitq ni odnogo modulja v fajjle ");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment