Diff for /freem/src/mdebug.c between versions 1.6 and 1.10

version 1.6, 2025/04/30 14:41:03 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
    *   Improve backtraces in debugger
    *
  *   Revision 1.6  2025/04/30 14:41:03  snw   *   Revision 1.6  2025/04/30 14:41:03  snw
  *   Further debugger work   *   Further debugger work
  *   *
Line 118  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 166  int debugger (int entry_mode, char *curc Line 179  int debugger (int entry_mode, char *curc
   
     while (1) {      while (1) {
                   
         //stcpy (rouname_buf, rou_name);          if (nstx == 0) {
         getraddress (rouname_buf, nstx);              stcpy (rouname_buf, rou_name);
           }
           else {
               char tbuf[256];
               
               getraddress (tbuf, nstx);
               stcpy (rouname_buf, &(tbuf[3]));
           }
         stcnv_m2c (rouname_buf);          stcnv_m2c (rouname_buf);
                   
         snprintf (dbg_prompt, sizeof (dbg_prompt) - 1, "%s $STACK=%d [DEBUG]> ", rouname_buf, nstx);          snprintf (dbg_prompt, sizeof (dbg_prompt) - 1, "%s $STACK=%d [DEBUG]> ", rouname_buf, nstx);
Line 206  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];
             printf ("%-10s%s\n", "$STACK", "(CMND)ENTRY");              char m_cmd[10];
             printf ("%-10s%s\n", "======", "===========");              char lref[1024];
               char bt_mcode[1024];
               
               printf ("%-10s%-10s%s\n", "$STACK", "COMMAND", "PLACE");
               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);
             for (i = nstx; i > 0; i--) {              for (i = nstx; i > 0; i--) {
                   
                 stcpy (tmpbuf, callerr[i]);                  stcpy (tmpbuf, callerr[i]);
                 stcnv_m2c (tmpbuf);                  stcnv_m2c (tmpbuf);
                 printf ("%-10d%s\n", i, 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%-10s%s\n", i, m_cmd, &(tmpbuf[3]));
                   stcpy (lref, &(tmpbuf[3]));
                   stcnv_m2c (lref);
                   if (routine_get_line (lref, bt_mcode) != NULL) {
                       stcnv_m2c (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");

Removed from v.1.6  
changed lines
  Added in v.1.10


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>