Hi,

I propose the following patch for the nebeans interface.

It does:

- add nbdebug statement for every error that might occur during the use
of netbeans. Some annoying stuff was not logged, like a command not
recognised by netbeans, or error only reported to the gui.

- put more meaningful messages when a command applies on a netbeans
buffer that is not found. Message was "null bufp in XXX". Now, it is
"invalid buffer identifier in XXX".

- allows netbeans stuff to compile when macro NBDEBUG is set. In current
vim state, it simply does not compile.

The patch was very helpful for me when debugging netbeans interactions.

Note that all the nbdebug() statements are compiled out if NBDEBUG macro
is not set (and by default, it is not set). So, it does not change
anything to regular vim.


        cheers,

        Philippe

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Index: netbeans.c
===================================================================
*** netbeans.c  (revision 986)
--- netbeans.c  (working copy)
***************
*** 323,328 ****
--- 323,329 ----
  
      if ((sd = (NBSOCK)socket(AF_INET, SOCK_STREAM, 0)) == (NBSOCK)-1)
      {
+       nbdebug(("error in socket() in netbeans_connect()\n"));
        PERROR("socket() in netbeans_connect()");
        goto theend;
      }
***************
*** 340,345 ****
--- 341,347 ----
            sd = mch_open(hostname, O_RDONLY, 0);
            goto theend;
        }
+       nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
        PERROR("gethostbyname() in netbeans_connect()");
        sd = -1;
        goto theend;
***************
*** 348,354 ****
  #else
      if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
      {
!       PERROR("socket()");
        goto theend;
      }
  
--- 350,357 ----
  #else
      if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
      {
!       nbdebug(("error in socket() in netbeans_connect()\n"));
!       PERROR("socket() in netbeans_connect()");
        goto theend;
      }
  
***************
*** 365,376 ****
--- 368,381 ----
  #ifdef INET_SOCKETS
            if ((sd = (NBSOCK)socket(AF_INET, SOCK_STREAM, 0)) == (NBSOCK)-1)
            {
+               nbdebug(("socket()#2 in netbeans_connect()\n"));
                PERROR("socket()#2 in netbeans_connect()");
                goto theend;
            }
  #else
            if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
            {
+               nbdebug(("socket()#2 in netbeans_connect()\n"));
                PERROR("socket()#2 in netbeans_connect()");
                goto theend;
            }
***************
*** 394,399 ****
--- 399,405 ----
                if (!success)
                {
                    /* Get here when the server can't be found. */
+                   nbdebug(("Cannot connect to Netbeans #2\n"));
                    PERROR(_("Cannot connect to Netbeans #2"));
                    getout(1);
                }
***************
*** 402,407 ****
--- 408,414 ----
        }
        else
        {
+           nbdebug(("Cannot connect to Netbeans\n"));
            PERROR(_("Cannot connect to Netbeans"));
            getout(1);
        }
***************
*** 446,451 ****
--- 453,459 ----
       */
      if (mch_stat(file, &st) == 0 && (st.st_mode & 0077) != 0)
      {
+       nbdebug(("Wrong access mode for NetBeans connection info file: 
\"%s\"\n")),
        EMSG2(_("E668: Wrong access mode for NetBeans connection info file: 
\"%s\""),
                                                                        file);
        return FAIL;
***************
*** 455,460 ****
--- 463,469 ----
      fp = mch_fopen(file, "r");
      if (fp == NULL)
      {
+       nbdebug(("Cannot open NetBeans connection info file\n"));
        PERROR("E660: Cannot open NetBeans connection info file");
        return FAIL;
      }
***************
*** 744,751 ****
        /* read error or didn't read anything */
        netbeans_disconnect();
        nbdebug(("messageFromNetbeans: Error in read() from socket\n"));
!       if (len < 0)
            PERROR(_("read from Netbeans socket"));
        return; /* don't try to parse it */
      }
  
--- 753,762 ----
        /* read error or didn't read anything */
        netbeans_disconnect();
        nbdebug(("messageFromNetbeans: Error in read() from socket\n"));
!       if (len < 0) {
!           nbdebug(("read from Netbeans socket\n"));
            PERROR(_("read from Netbeans socket"));
+       }
        return; /* don't try to parse it */
      }
  
***************
*** 805,810 ****
--- 816,822 ----
  
      if (*verb != ':')
      {
+       nbdebug(("    missing colon: %s\n", cmd));
        EMSG2("E627: missing colon: %s", cmd);
        return;
      }
***************
*** 828,833 ****
--- 840,846 ----
  
      if (isfunc < 0)
      {
+       nbdebug(("    missing ! or / in: %s\n", cmd));
        EMSG2("E628: missing ! or / in: %s", cmd);
        return;
      }
***************
*** 1033,1045 ****
--- 1046,1064 ----
      if (sd < 0)
      {
        if (!did_error)
+       {
+           nbdebug(("    %s(): write while not connected\n", fun));
            EMSG2("E630: %s(): write while not connected", fun);
+       }
        did_error = TRUE;
      }
      else if (sock_write(sd, buf, (int)STRLEN(buf)) != (int)STRLEN(buf))
      {
        if (!did_error)
+       {
+           nbdebug(("    %s(): write failed\n", fun));
            EMSG2("E631: %s(): write failed", fun);
+       }
        did_error = TRUE;
      }
      else
***************
*** 1325,1332 ****
  #ifdef FEAT_SIGNS
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in getAnno"));
!               EMSG("E652: null bufp in getAnno");
                retval = FAIL;
            }
            else
--- 1344,1351 ----
  #ifdef FEAT_SIGNS
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    Invalid buffer identifier in getAnno\n"));
!               EMSG("E652: Invalid buffer identifier in getAnno");
                retval = FAIL;
            }
            else
***************
*** 1348,1355 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in getLength"));
!               EMSG("E632: null bufp in getLength");
                retval = FAIL;
            }
            else
--- 1367,1374 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in getLength\n"));
!               EMSG("E632: invalid buffer identifier in getLength");
                retval = FAIL;
            }
            else
***************
*** 1370,1377 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in getText"));
!               EMSG("E633: null bufp in getText");
                retval = FAIL;
            }
            else
--- 1389,1396 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in getText\n"));
!               EMSG("E633: invalid buffer identifier in getText");
                retval = FAIL;
            }
            else
***************
*** 1434,1441 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in remove"));
!               EMSG("E634: null bufp in remove");
                retval = FAIL;
            }
            else
--- 1453,1460 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in remove\n"));
!               EMSG("E634: invalid buffer identifier in remove");
                retval = FAIL;
            }
            else
***************
*** 1453,1458 ****
--- 1472,1478 ----
                pos = off2pos(buf->bufp, off);
                if (!pos)
                {
+                   nbdebug(("    !bad position\n"));
                    nb_reply_text(cmdno, (char_u *)"!bad position");
                    netbeansFireChanges = oldFire;
                    netbeansSuppressNoLines = oldSuppress;
***************
*** 1463,1468 ****
--- 1483,1489 ----
                pos = off2pos(buf->bufp, off+count-1);
                if (!pos)
                {
+                   nbdebug(("    !bad count\n"));
                    nb_reply_text(cmdno, (char_u *)"!bad count");
                    netbeansFireChanges = oldFire;
                    netbeansSuppressNoLines = oldSuppress;
***************
*** 1595,1602 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in insert"));
!               EMSG("E635: null bufp in insert");
                retval = FAIL;
            }
            else if (args != NULL)
--- 1616,1623 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in insert\n"));
!               EMSG("E635: invalid buffer identifier in insert");
                retval = FAIL;
            }
            else if (args != NULL)
***************
*** 1752,1758 ****
            /* Create a buffer without a name. */
            if (buf == NULL)
            {
!               EMSG("E636: null buf in create");
                return FAIL;
            }
            vim_free(buf->displayname);
--- 1773,1780 ----
            /* Create a buffer without a name. */
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in create\n"));
!               EMSG("E636: invalid buffer identifier in create");
                return FAIL;
            }
            vim_free(buf->displayname);
***************
*** 1771,1777 ****
        {
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in insertDone"));
            }
            else
            {
--- 1793,1799 ----
        {
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in insertDone\n"));
            }
            else
            {
***************
*** 1789,1795 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in saveDone"));
            }
            else
                print_save_msg(buf, savedChars);
--- 1811,1817 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in saveDone\n"));
            }
            else
                print_save_msg(buf, savedChars);
***************
*** 1799,1805 ****
        {
            if (buf == NULL)
            {
!               EMSG("E637: null buf in startDocumentListen");
                return FAIL;
            }
            buf->fireChanges = 1;
--- 1821,1828 ----
        {
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in 
startDocumentListen\n"));
!               EMSG("E637: invalid buffer identifier in startDocumentListen");
                return FAIL;
            }
            buf->fireChanges = 1;
***************
*** 1809,1823 ****
        {
            if (buf == NULL)
            {
!               EMSG("E638: null buf in stopDocumentListen");
                return FAIL;
            }
            buf->fireChanges = 0;
            if (buf->bufp != NULL && buf->bufp->b_was_netbeans_file)
            {
                if (!buf->bufp->b_netbeans_file)
                    EMSGN(_("E658: NetBeans connection lost for buffer %ld"),
                                                           buf->bufp->b_fnum);
                else
                {
                    /* NetBeans uses stopDocumentListen when it stops editing
--- 1832,1850 ----
        {
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in 
stopDocumentListen\n"));
!               EMSG("E638: invalid buffer identifier in stopDocumentListen");
                return FAIL;
            }
            buf->fireChanges = 0;
            if (buf->bufp != NULL && buf->bufp->b_was_netbeans_file)
            {
                if (!buf->bufp->b_netbeans_file)
+               {
+                   nbdebug(("E658: NetBeans connection lost for buffer %ld\n", 
buf->bufp->b_fnum));    
                    EMSGN(_("E658: NetBeans connection lost for buffer %ld"),
                                                           buf->bufp->b_fnum);
+               }
                else
                {
                    /* NetBeans uses stopDocumentListen when it stops editing
***************
*** 1834,1840 ****
        {
            if (buf == NULL)
            {
!               EMSG("E639: null buf in setTitle");
                return FAIL;
            }
            vim_free(buf->displayname);
--- 1861,1868 ----
        {
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in setTitle\n"));
!               EMSG("E639: invalid buffer identifier in setTitle");
                return FAIL;
            }
            vim_free(buf->displayname);
***************
*** 1845,1851 ****
        {
            if (buf == NULL || buf->bufp == NULL)
            {
!               EMSG("E640: null buf in initDone");
                return FAIL;
            }
            doupdate = 1;
--- 1873,1880 ----
        {
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in initDone\n"));
!               EMSG("E640: invalid buffer identifier in initDone");
                return FAIL;
            }
            doupdate = 1;
***************
*** 1867,1873 ****
  
            if (buf == NULL)
            {
!               EMSG("E641: null buf in setBufferNumber");
                return FAIL;
            }
            path = (char_u *)nb_unquote(args, NULL);
--- 1896,1903 ----
  
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in setBufferNumber\n"));
!               EMSG("E641: invalid buffer identifier in setBufferNumber");
                return FAIL;
            }
            path = (char_u *)nb_unquote(args, NULL);
***************
*** 1877,1882 ****
--- 1907,1913 ----
            vim_free(path);
            if (bufp == NULL)
            {
+               nbdebug(("    File %s not found in setBufferNumber\n", args));
                EMSG2("E642: File %s not found in setBufferNumber", args);
                return FAIL;
            }
***************
*** 1906,1912 ****
        {
            if (buf == NULL)
            {
!               EMSG("E643: null buf in setFullName");
                return FAIL;
            }
            vim_free(buf->displayname);
--- 1937,1944 ----
        {
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in setFullName\n"));
!               EMSG("E643: invalid buffer identifier in setFullName");
                return FAIL;
            }
            vim_free(buf->displayname);
***************
*** 1925,1931 ****
        {
            if (buf == NULL)
            {
!               EMSG("E644: null buf in editFile");
                return FAIL;
            }
            /* Edit a file: like create + setFullName + read the file. */
--- 1957,1964 ----
        {
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in editFile\n"));
!               EMSG("E644: invalid buffer identifier in editFile");
                return FAIL;
            }
            /* Edit a file: like create + setFullName + read the file. */
***************
*** 1946,1952 ****
        {
            if (buf == NULL || buf->bufp == NULL)
            {
! /*            EMSG("E645: null bufp in setVisible"); */
                return FAIL;
            }
            if (streq((char *)args, "T") && buf->bufp != curbuf)
--- 1979,1986 ----
        {
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in setVisible\n"));
!               EMSG("E645: invalid buffer identifier in setVisible");
                return FAIL;
            }
            if (streq((char *)args, "T") && buf->bufp != curbuf)
***************
*** 1976,1982 ****
        {
            if (buf == NULL || buf->bufp == NULL)
            {
! /*            EMSG("E646: null bufp in setModified"); */
                return FAIL;
            }
            if (streq((char *)args, "T"))
--- 2010,2017 ----
        {
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in setModified\n"));
!               EMSG("E646: invalid buffer identifier in setModified");
                return FAIL;
            }
            if (streq((char *)args, "T"))
***************
*** 1998,2004 ****
        else if (streq((char *)cmd, "setModtime"))
        {
            if (buf == NULL || buf->bufp == NULL)
!               nbdebug(("    null bufp in setModtime"));
            else
                buf->bufp->b_mtime = atoi((char *)args);
  /* =====================================================================*/
--- 2033,2039 ----
        else if (streq((char *)cmd, "setModtime"))
        {
            if (buf == NULL || buf->bufp == NULL)
!               nbdebug(("    invalid buffer identifier in setModtime\n"));
            else
                buf->bufp->b_mtime = atoi((char *)args);
  /* =====================================================================*/
***************
*** 2006,2012 ****
        else if (streq((char *)cmd, "setReadOnly"))
        {
            if (buf == NULL || buf->bufp == NULL)
!               nbdebug(("    null bufp in setReadOnly"));
            else if (streq((char *)args, "T"))
                buf->bufp->b_p_ro = TRUE;
            else
--- 2041,2047 ----
        else if (streq((char *)cmd, "setReadOnly"))
        {
            if (buf == NULL || buf->bufp == NULL)
!               nbdebug(("    invalid buffer identifier in setReadOnly\n"));
            else if (streq((char *)args, "T"))
                buf->bufp->b_p_ro = TRUE;
            else
***************
*** 2047,2053 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               EMSG("E647: null bufp in setDot");
                return FAIL;
            }
  
--- 2082,2089 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in setDot\n"));
!               EMSG("E647: invalid buffer identifier in setDot");
                return FAIL;
            }
  
***************
*** 2099,2105 ****
  
            if (buf == NULL)
            {
!               EMSG("E648: null buf in close");
                return FAIL;
            }
  
--- 2135,2142 ----
  
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in close\n"));
!               EMSG("E648: invalid buffer identifier in close");
                return FAIL;
            }
  
***************
*** 2107,2114 ****
            if (buf->displayname != NULL)
                name = buf->displayname;
  #endif
! /*        if (buf->bufp == NULL) */
! /*            EMSG("E649: null bufp in close"); */
            nbdebug(("    CLOSE %d: %s\n", bufno, name));
            need_mouse_correct = TRUE;
            if (buf->bufp != NULL)
--- 2144,2154 ----
            if (buf->displayname != NULL)
                name = buf->displayname;
  #endif
!           if (buf->bufp == NULL) 
!           {
!               nbdebug(("    invalid buffer identifier in close\n"));
!               EMSG("E649: invalid buffer identifier in close");
!           }
            nbdebug(("    CLOSE %d: %s\n", bufno, name));
            need_mouse_correct = TRUE;
            if (buf->bufp != NULL)
***************
*** 2121,2127 ****
        }
        else if (streq((char *)cmd, "setStyle")) /* obsolete... */
        {
!           nbdebug(("    setStyle is obsolete!"));
  /* =====================================================================*/
        }
        else if (streq((char *)cmd, "setExitDelay"))
--- 2161,2167 ----
        }
        else if (streq((char *)cmd, "setStyle")) /* obsolete... */
        {
!           nbdebug(("    setStyle is obsolete!\n"));
  /* =====================================================================*/
        }
        else if (streq((char *)cmd, "setExitDelay"))
***************
*** 2144,2150 ****
  
            if (buf == NULL)
            {
!               EMSG("E650: null buf in defineAnnoType");
                return FAIL;
            }
  
--- 2184,2191 ----
  
            if (buf == NULL)
            {
!               nbdebug(("    invalid buffer identifier in defineAnnoType\n"));
!               EMSG("E650: invalid buffer identifier in defineAnnoType");
                return FAIL;
            }
  
***************
*** 2206,2212 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               EMSG("E651: null bufp in addAnno");
                return FAIL;
            }
  
--- 2247,2254 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in addAnno\n"));
!               EMSG("E651: invalid buffer identifier in addAnno");
                return FAIL;
            }
  
***************
*** 2232,2243 ****
  # ifdef NBDEBUG
            if (len != -1)
            {
!               nbdebug(("    partial line annotation -- Not Yet 
Implemented!"));
            }
  # endif
            if (serNum >= GUARDEDOFFSET)
            {
!               nbdebug(("    too many annotations! ignoring..."));
                return FAIL;
            }
            if (pos)
--- 2274,2285 ----
  # ifdef NBDEBUG
            if (len != -1)
            {
!               nbdebug(("    partial line annotation -- Not Yet 
Implemented!\n"));
            }
  # endif
            if (serNum >= GUARDEDOFFSET)
            {
!               nbdebug(("    too many annotations! ignoring...\n"));
                return FAIL;
            }
            if (pos)
***************
*** 2258,2264 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in removeAnno"));
                return FAIL;
            }
            doupdate = 1;
--- 2300,2306 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in removeAnno\n"));
                return FAIL;
            }
            doupdate = 1;
***************
*** 2274,2280 ****
        else if (streq((char *)cmd, "moveAnnoToFront"))
        {
  #ifdef FEAT_SIGNS
!           nbdebug(("    moveAnnoToFront: Not Yet Implemented!"));
  #endif
  /* =====================================================================*/
        }
--- 2316,2322 ----
        else if (streq((char *)cmd, "moveAnnoToFront"))
        {
  #ifdef FEAT_SIGNS
!           nbdebug(("    moveAnnoToFront: Not Yet Implemented!\n"));
  #endif
  /* =====================================================================*/
        }
***************
*** 2297,2303 ****
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in %s command", cmd));
                return FAIL;
            }
            nb_set_curbuf(buf->bufp);
--- 2339,2345 ----
  
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in %s command\n", cmd));
                return FAIL;
            }
            nb_set_curbuf(buf->bufp);
***************
*** 2381,2387 ****
             */
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in %s command", cmd));
                return FAIL;
            }
  
--- 2423,2429 ----
             */
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in %s command\n", cmd));
                return FAIL;
            }
  
***************
*** 2403,2409 ****
                    if (!buf_valid(buf->bufp))
                        buf->bufp = NULL;
  #endif
!               }
            }
  /* =====================================================================*/
        }
--- 2445,2453 ----
                    if (!buf_valid(buf->bufp))
                        buf->bufp = NULL;
  #endif
!                       }
!           } else {
!               nbdebug(("    Buffer has no changes!\n"));
            }
  /* =====================================================================*/
        }
***************
*** 2411,2417 ****
        {
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    null bufp in %s command", cmd));
                return FAIL;
            }
            if (*args == 'T')
--- 2455,2461 ----
        {
            if (buf == NULL || buf->bufp == NULL)
            {
!               nbdebug(("    invalid buffer identifier in %s command\n", cmd));
                return FAIL;
            }
            if (*args == 'T')
***************
*** 2436,2441 ****
--- 2480,2488 ----
        else if (streq((char *)cmd, "version"))
        {
            /* not used yet */
+       } else 
+       {
+           nbdebug(("Unrecognised command: %s\n", cmd));
        }
        /*
         * Unrecognized command is ignored.
***************
*** 2976,2982 ****
  
      if (len < 0)
      {
!       nbdebug(("Negative len %ld in netbeans_removed()!", len));
        return;
      }
  
--- 3023,3029 ----
  
      if (len < 0)
      {
!       nbdebug(("Negative len %ld in netbeans_removed()!\n", len));
        return;
      }
  
***************
*** 3617,3622 ****
--- 3664,3670 ----
        STRCAT(ebuf, IObuff);
        STRCAT(ebuf, (char_u *)_("is read-only (add ! to override)"));
        STRCPY(IObuff, ebuf);
+       nbdebug(("    %s\n", ebuf ));
        emsg(IObuff);
      }
  }
Index: nbdebug.h
===================================================================
*** nbdebug.h   (revision 986)
--- nbdebug.h   (working copy)
***************
*** 23,29 ****
      }
  #endif
  
! #define nbdebug(a) nbdbg##a
  
  #define NB_TRACE              0x00000001
  #define NB_TRACE_VERBOSE      0x00000002
--- 23,29 ----
      }
  #endif
  
! #define nbdebug(a) nbdbg a
  
  #define NB_TRACE              0x00000001
  #define NB_TRACE_VERBOSE      0x00000002

Reply via email to