Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

109 lines
2.3 KiB

/*** debugger.c - Debugger functions
*
* This module contains all the debug functions.
*
* Copyright (c) 1996,1997 Microsoft Corporation
* Author: Michael Tsang (MikeTs)
* Created 09/18/96
*
* MODIFICATION HISTORY
*/
#include "pch.h"
#ifdef DEBUGGER
/*** Miscellaneous Constants
*/
#define MAX_CMDLINE_LEN 255
/*** Local function prototypes
*/
LONG LOCAL DbgExecuteCmd(PDBGCMD pDbgCmds, PSZ pszCmd);
/*** Local data
*/
PSZ pszTokenSeps = " \t\n";
/***LP Debugger - generic debugger entry point
*
* ENTRY
* pDbgCmds -> debugger command table
* pszPrompt -> prompt string
*
* EXIT
* None
*/
VOID LOCAL Debugger(PDBGCMD pDbgCmds, PSZ pszPrompt)
{
char szCmdLine[MAX_CMDLINE_LEN + 1];
PSZ psz;
for (;;)
{
ConPrompt(pszPrompt, szCmdLine, sizeof(szCmdLine));
if ((psz = STRTOK(szCmdLine, pszTokenSeps)) != NULL)
{
if (DbgExecuteCmd(pDbgCmds, psz) == DBGERR_QUIT)
break;
}
}
} //Debugger
/***LP DbgExecuteCmd - execute a debugger command
*
* ENTRY
* pDbgCmds -> debugger command table
* pszCmd -> command string
*
* EXIT-SUCCESS
* returns DBGERR_NONE or DBGERR_QUIT
* EXIT-FAILURE
* returns negative error code
*/
LONG LOCAL DbgExecuteCmd(PDBGCMD pDbgCmds, PSZ pszCmd)
{
LONG rc = DBGERR_NONE;
int i;
ULONG dwNumArgs = 0, dwNonSWArgs = 0;
for (i = 0; pDbgCmds[i].pszCmd != NULL; i++)
{
if (STRCMP(pszCmd, pDbgCmds[i].pszCmd) == 0)
{
if (pDbgCmds[i].dwfCmd & CMDF_QUIT)
{
rc = DBGERR_QUIT;
}
else if ((pDbgCmds[i].pArgTable == NULL) ||
((rc = DbgParseArgs(pDbgCmds[i].pArgTable, &dwNumArgs,
&dwNonSWArgs, pszTokenSeps)) ==
ARGERR_NONE))
{
if (pDbgCmds[i].pfnCmd != NULL)
rc = pDbgCmds[i].pfnCmd(NULL, NULL, dwNumArgs, dwNonSWArgs);
}
else
rc = DBGERR_PARSE_ARGS;
break;
}
}
if (pDbgCmds[i].pszCmd == NULL)
{
DBG_ERROR(("invalid command - %s", pszCmd));
rc = DBGERR_INVALID_CMD;
}
return rc;
} //DbgExecuteCmd
#endif //ifdef DEBUGGER