version 1.7, 2025/04/30 17:19:16
|
version 1.10, 2025/05/01 04:45:15
|
Line 24
|
Line 24
|
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* |
* |
* $Log$ |
* $Log$ |
|
* Revision 1.10 2025/05/01 04:45:15 snw |
|
* Improve backtraces |
|
* |
|
* Revision 1.9 2025/05/01 03:56:29 snw |
|
* -m |
|
* |
|
* Revision 1.8 2025/04/30 20:03:09 snw |
|
* Work on entryref parser |
|
* |
* Revision 1.7 2025/04/30 17:19:16 snw |
* Revision 1.7 2025/04/30 17:19:16 snw |
* Improve backtraces in debugger |
* Improve backtraces in debugger |
* |
* |
Line 121 int debugger (int entry_mode, char *curc
|
Line 130 int debugger (int entry_mode, char *curc
|
char *dbg_cmd; |
char *dbg_cmd; |
int do_prompt = FALSE; |
int do_prompt = FALSE; |
register int i; |
register int i; |
|
register int j; |
|
|
set_io (UNIX); |
set_io (UNIX); |
|
|
Line 216 int debugger (int entry_mode, char *curc
|
Line 226 int debugger (int entry_mode, char *curc
|
return TRUE; |
return TRUE; |
} |
} |
else if ((strcmp (dbg_cmd, "backtrace") == 0) || (strcmp (dbg_cmd, "bt") == 0)) { |
else if ((strcmp (dbg_cmd, "backtrace") == 0) || (strcmp (dbg_cmd, "bt") == 0)) { |
char tmpbuf[256]; |
char tmpbuf[1024]; |
char ecbuf[256]; |
char ecbuf[256]; |
char lref[256]; |
char m_cmd[10]; |
char bt_mcode[256]; |
char lref[1024]; |
|
char bt_mcode[1024]; |
|
|
printf ("%-10s%s\n", "$STACK", "ENTRY"); |
printf ("%-10s%-10s%s\n", "$STACK", "COMMAND", "PLACE"); |
printf ("%-10s%s\n", "======", "====="); |
printf ("%-10s%-10s%s\n", "======", "=======", "====="); |
|
|
|
|
for (i = 1; i <= nstx; i++) getraddress (callerr[i], i); |
for (i = 1; i <= nstx; i++) getraddress (callerr[i], i); |
Line 230 int debugger (int entry_mode, char *curc
|
Line 241 int debugger (int entry_mode, char *curc
|
|
|
stcpy (tmpbuf, callerr[i]); |
stcpy (tmpbuf, callerr[i]); |
stcnv_m2c (tmpbuf); |
stcnv_m2c (tmpbuf); |
|
strcpy (ecbuf, &(tmpbuf[1])); |
|
|
|
for (j = 0; j < strlen (ecbuf); j++) { |
|
if (ecbuf[j] == ')') { |
|
ecbuf[j] = '\0'; |
|
break; |
|
} |
|
} |
|
|
|
switch (ecbuf[0]) { |
|
case 'F': |
|
sprintf (m_cmd, "FOR"); |
|
break; |
|
case 'D': |
|
sprintf (m_cmd, "DO"); |
|
break; |
|
} |
|
|
|
|
printf ("%-10d%s\n", i, &(tmpbuf[3])); |
printf ("%-10d%-10s%s\n", i, m_cmd, &(tmpbuf[3])); |
stcpy (lref, &(tmpbuf[3])); |
stcpy (lref, &(tmpbuf[3])); |
stcnv_m2c (lref); |
stcnv_m2c (lref); |
if (m_text (lref, bt_mcode) != NULL) { |
if (routine_get_line (lref, bt_mcode) != NULL) { |
stcnv_m2c (bt_mcode); |
stcnv_m2c (bt_mcode); |
printf ("\t%s\n", bt_mcode); |
printf ("%-20s%s\n", " ", bt_mcode); |
} |
} |
} |
} |
|
stcpy (ecbuf, etrap); |
|
stcnv_m2c (ecbuf); |
|
printf ("ETRAP:\t%s\n", ecbuf); |
|
stcpy (ecbuf, ztrap[nstx]); |
|
stcnv_m2c (ecbuf); |
|
printf ("ZTRAP:\t%s\n", ecbuf); |
|
|
} |
} |
else { |
else { |
printf ("DEBUG: invalid command\r\n"); |
printf ("DEBUG: invalid command\r\n"); |