|
|
| 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"); |