1
0
Fork 0

DBG+GUI: use ',' instead of '\1' to seperate commands

This commit is contained in:
mrexodia 2017-03-12 06:54:18 +01:00
parent c7c654c24b
commit e13c899a47
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
3 changed files with 133 additions and 133 deletions

View File

@ -109,7 +109,7 @@ bool cmdnew(const char* name, CBCOMMAND cbCommand, bool debugonly)
cmd = (COMMAND*)emalloc(sizeof(COMMAND), "cmdnew:cmd"); cmd = (COMMAND*)emalloc(sizeof(COMMAND), "cmdnew:cmd");
memset(cmd, 0, sizeof(COMMAND)); memset(cmd, 0, sizeof(COMMAND));
cmd->names = new std::vector<String>; cmd->names = new std::vector<String>;
auto split = StringUtils::Split(name, '\1'); auto split = StringUtils::Split(name, ',');
for(const auto & s : split) for(const auto & s : split)
{ {
auto trimmed = StringUtils::Trim(s); auto trimmed = StringUtils::Trim(s);

View File

@ -91,66 +91,66 @@ static void registercommands()
dbgcmdnew("bswap", cbInstrBswap, false); dbgcmdnew("bswap", cbInstrBswap, false);
dbgcmdnew("rol", cbInstrRol, false); dbgcmdnew("rol", cbInstrRol, false);
dbgcmdnew("ror", cbInstrRor, false); dbgcmdnew("ror", cbInstrRor, false);
dbgcmdnew("shl\1sal", cbInstrShl, false); dbgcmdnew("shl,sal", cbInstrShl, false);
dbgcmdnew("shr", cbInstrShr, false); dbgcmdnew("shr", cbInstrShr, false);
dbgcmdnew("sar", cbInstrSar, false); dbgcmdnew("sar", cbInstrSar, false);
dbgcmdnew("push", cbInstrPush, true); dbgcmdnew("push", cbInstrPush, true);
dbgcmdnew("pop", cbInstrPop, true); dbgcmdnew("pop", cbInstrPop, true);
dbgcmdnew("test", cbInstrTest, false); dbgcmdnew("test", cbInstrTest, false);
dbgcmdnew("cmp", cbInstrCmp, false); dbgcmdnew("cmp", cbInstrCmp, false);
dbgcmdnew("mov\1set", cbInstrMov, false); //mov a variable, arg1:dest,arg2:src dbgcmdnew("mov,set", cbInstrMov, false); //mov a variable, arg1:dest,arg2:src
//debug control //debug control
dbgcmdnew("InitDebug\1init\1initdbg", cbDebugInit, false); //init debugger arg1:exefile,[arg2:commandline] dbgcmdnew("InitDebug,init,initdbg", cbDebugInit, false); //init debugger arg1:exefile,[arg2:commandline]
dbgcmdnew("StopDebug\1stop\1dbgstop", cbDebugStop, true); //stop debugger dbgcmdnew("StopDebug,stop,dbgstop", cbDebugStop, true); //stop debugger
dbgcmdnew("AttachDebugger\1attach", cbDebugAttach, false); //attach dbgcmdnew("AttachDebugger,attach", cbDebugAttach, false); //attach
dbgcmdnew("DetachDebugger\1detach", cbDebugDetach, true); //detach dbgcmdnew("DetachDebugger,detach", cbDebugDetach, true); //detach
dbgcmdnew("run\1go\1r\1g", cbDebugRun, true); //unlock WAITID_RUN dbgcmdnew("run,go,r,g", cbDebugRun, true); //unlock WAITID_RUN
dbgcmdnew("erun\1egun\1er\1eg", cbDebugErun, true); //run + skip first chance exceptions dbgcmdnew("erun,egun,er,eg", cbDebugErun, true); //run + skip first chance exceptions
dbgcmdnew("serun\1sego", cbDebugSerun, true); //run + swallow exception dbgcmdnew("serun,sego", cbDebugSerun, true); //run + swallow exception
dbgcmdnew("pause", cbDebugPause, false); //pause debugger dbgcmdnew("pause", cbDebugPause, false); //pause debugger
dbgcmdnew("DebugContinue\1con", cbDebugContinue, true); //set continue status dbgcmdnew("DebugContinue,con", cbDebugContinue, true); //set continue status
dbgcmdnew("StepInto\1sti\1SingleStep\1sstep\1sst", cbDebugStepInto, true); //StepInto dbgcmdnew("StepInto,sti,SingleStep,sstep,sst", cbDebugStepInto, true); //StepInto
dbgcmdnew("eStepInto\1esti", cbDebugeStepInto, true); //StepInto + skip first chance exceptions dbgcmdnew("eStepInto,esti", cbDebugeStepInto, true); //StepInto + skip first chance exceptions
dbgcmdnew("seStepInto\1sesti\1eSingleStep\1esstep\1esst", cbDebugseStepInto, true); //StepInto + swallow exception dbgcmdnew("seStepInto,sesti,eSingleStep,esstep,esst", cbDebugseStepInto, true); //StepInto + swallow exception
dbgcmdnew("StepOver\1step\1sto\1st", cbDebugStepOver, true); //StepOver dbgcmdnew("StepOver,step,sto,st", cbDebugStepOver, true); //StepOver
dbgcmdnew("eStepOver\1estep\1esto\1est", cbDebugeStepOver, true); //StepOver + skip first chance exceptions dbgcmdnew("eStepOver,estep,esto,est", cbDebugeStepOver, true); //StepOver + skip first chance exceptions
dbgcmdnew("seStepOver\1sestep\1sesto\1sest", cbDebugseStepOver, true); //StepOver + swallow exception dbgcmdnew("seStepOver,sestep,sesto,sest", cbDebugseStepOver, true); //StepOver + swallow exception
dbgcmdnew("StepOut\1rtr", cbDebugStepOut, true); //StepOut dbgcmdnew("StepOut,rtr", cbDebugStepOut, true); //StepOut
dbgcmdnew("eStepOut\1ertr", cbDebugeStepOut, true); //rtr + skip first chance exceptions dbgcmdnew("eStepOut,ertr", cbDebugeStepOut, true); //rtr + skip first chance exceptions
dbgcmdnew("skip", cbDebugSkip, true); //skip one instruction dbgcmdnew("skip", cbDebugSkip, true); //skip one instruction
dbgcmdnew("InstrUndo", cbInstrInstrUndo, true); //Instruction undo dbgcmdnew("InstrUndo", cbInstrInstrUndo, true); //Instruction undo
//breakpoint control //breakpoint control
dbgcmdnew("SetBPX\1bp\1bpx", cbDebugSetBPX, true); //breakpoint dbgcmdnew("SetBPX,bp,bpx", cbDebugSetBPX, true); //breakpoint
dbgcmdnew("DeleteBPX\1bpc\1bc", cbDebugDeleteBPX, true); //breakpoint delete dbgcmdnew("DeleteBPX,bpc,bc", cbDebugDeleteBPX, true); //breakpoint delete
dbgcmdnew("EnableBPX\1bpe\1be", cbDebugEnableBPX, true); //breakpoint enable dbgcmdnew("EnableBPX,bpe,be", cbDebugEnableBPX, true); //breakpoint enable
dbgcmdnew("DisableBPX\1bpd\1bd", cbDebugDisableBPX, true); //breakpoint disable dbgcmdnew("DisableBPX,bpd,bd", cbDebugDisableBPX, true); //breakpoint disable
dbgcmdnew("SetHardwareBreakpoint\1bph\1bphws", cbDebugSetHardwareBreakpoint, true); //hardware breakpoint dbgcmdnew("SetHardwareBreakpoint,bph,bphws", cbDebugSetHardwareBreakpoint, true); //hardware breakpoint
dbgcmdnew("DeleteHardwareBreakpoint\1bphc\1bphwc", cbDebugDeleteHardwareBreakpoint, true); //delete hardware breakpoint dbgcmdnew("DeleteHardwareBreakpoint,bphc,bphwc", cbDebugDeleteHardwareBreakpoint, true); //delete hardware breakpoint
dbgcmdnew("EnableHardwareBreakpoint\1bphe\1bphwe", cbDebugEnableHardwareBreakpoint, true); //enable hardware breakpoint dbgcmdnew("EnableHardwareBreakpoint,bphe,bphwe", cbDebugEnableHardwareBreakpoint, true); //enable hardware breakpoint
dbgcmdnew("DisableHardwareBreakpoint\1bphd\1bphwd", cbDebugDisableHardwareBreakpoint, true); //disable hardware breakpoint dbgcmdnew("DisableHardwareBreakpoint,bphd,bphwd", cbDebugDisableHardwareBreakpoint, true); //disable hardware breakpoint
dbgcmdnew("SetMemoryBPX\1membp\1bpm", cbDebugSetMemoryBpx, true); //SetMemoryBPX dbgcmdnew("SetMemoryBPX,membp,bpm", cbDebugSetMemoryBpx, true); //SetMemoryBPX
dbgcmdnew("DeleteMemoryBPX\1membpc\1bpmc", cbDebugDeleteMemoryBreakpoint, true); //delete memory breakpoint dbgcmdnew("DeleteMemoryBPX,membpc,bpmc", cbDebugDeleteMemoryBreakpoint, true); //delete memory breakpoint
dbgcmdnew("EnableMemoryBreakpoint\1membpe\1bpme", cbDebugEnableMemoryBreakpoint, true); //enable memory breakpoint dbgcmdnew("EnableMemoryBreakpoint,membpe,bpme", cbDebugEnableMemoryBreakpoint, true); //enable memory breakpoint
dbgcmdnew("DisableMemoryBreakpoint\1membpd\1bpmd", cbDebugDisableMemoryBreakpoint, true); //enable memory breakpoint dbgcmdnew("DisableMemoryBreakpoint,membpd,bpmd", cbDebugDisableMemoryBreakpoint, true); //enable memory breakpoint
dbgcmdnew("LibrarianSetBreakpoint\1bpdll", cbDebugBpDll, true); //set dll breakpoint dbgcmdnew("LibrarianSetBreakpoint,bpdll", cbDebugBpDll, true); //set dll breakpoint
dbgcmdnew("LibrarianRemoveBreakpoint\1bcdll", cbDebugBcDll, true); //remove dll breakpoint dbgcmdnew("LibrarianRemoveBreakpoint,bcdll", cbDebugBcDll, true); //remove dll breakpoint
dbgcmdnew("LibrarianEnableBreakpoint\1bpedll", cbDebugBpDllEnable, true); //enable dll breakpoint dbgcmdnew("LibrarianEnableBreakpoint,bpedll", cbDebugBpDllEnable, true); //enable dll breakpoint
dbgcmdnew("LibrarianDisableBreakpoint\1bpddll", cbDebugBpDllDisable, true); //disable dll breakpoint dbgcmdnew("LibrarianDisableBreakpoint,bpddll", cbDebugBpDllDisable, true); //disable dll breakpoint
dbgcmdnew("SetExceptionBPX", cbDebugSetExceptionBPX, true); //set exception breakpoint dbgcmdnew("SetExceptionBPX", cbDebugSetExceptionBPX, true); //set exception breakpoint
dbgcmdnew("DeleteExceptionBPX", cbDebugDeleteExceptionBPX, true); //delete exception breakpoint dbgcmdnew("DeleteExceptionBPX", cbDebugDeleteExceptionBPX, true); //delete exception breakpoint
dbgcmdnew("EnableExceptionBPX", cbDebugEnableExceptionBPX, true); //enable exception breakpoint dbgcmdnew("EnableExceptionBPX", cbDebugEnableExceptionBPX, true); //enable exception breakpoint
dbgcmdnew("DisableExceptionBPX", cbDebugDisableExceptionBPX, true); //disable exception breakpoint dbgcmdnew("DisableExceptionBPX", cbDebugDisableExceptionBPX, true); //disable exception breakpoint
dbgcmdnew("bpgoto", cbDebugSetBPGoto, true); dbgcmdnew("bpgoto", cbDebugSetBPGoto, true);
dbgcmdnew("bplist", cbDebugBplist, true); //breakpoint list dbgcmdnew("bplist", cbDebugBplist, true); //breakpoint list
dbgcmdnew("SetBPXOptions\1bptype", cbDebugSetBPXOptions, false); //breakpoint type dbgcmdnew("SetBPXOptions,bptype", cbDebugSetBPXOptions, false); //breakpoint type
//conditional breakpoint control //conditional breakpoint control
dbgcmdnew("SetBreakpointName\1bpname", cbDebugSetBPXName, true); //set breakpoint name dbgcmdnew("SetBreakpointName,bpname", cbDebugSetBPXName, true); //set breakpoint name
dbgcmdnew("SetBreakpointCondition\1bpcond\1bpcnd", cbDebugSetBPXCondition, true); //set breakpoint breakCondition dbgcmdnew("SetBreakpointCondition,bpcond,bpcnd", cbDebugSetBPXCondition, true); //set breakpoint breakCondition
dbgcmdnew("SetBreakpointLog\1bplog\1bpl", cbDebugSetBPXLog, true); //set breakpoint logText dbgcmdnew("SetBreakpointLog,bplog,bpl", cbDebugSetBPXLog, true); //set breakpoint logText
dbgcmdnew("SetBreakpointLogCondition\1bplogcondition", cbDebugSetBPXLogCondition, true); //set breakpoint logCondition dbgcmdnew("SetBreakpointLogCondition,bplogcondition", cbDebugSetBPXLogCondition, true); //set breakpoint logCondition
dbgcmdnew("SetBreakpointCommand", cbDebugSetBPXCommand, true); //set breakpoint command on hit dbgcmdnew("SetBreakpointCommand", cbDebugSetBPXCommand, true); //set breakpoint command on hit
dbgcmdnew("SetBreakpointCommandCondition", cbDebugSetBPXCommandCondition, true); //set breakpoint commandCondition dbgcmdnew("SetBreakpointCommandCondition", cbDebugSetBPXCommandCondition, true); //set breakpoint commandCondition
dbgcmdnew("SetBreakpointFastResume", cbDebugSetBPXFastResume, true); //set breakpoint fast resume dbgcmdnew("SetBreakpointFastResume", cbDebugSetBPXFastResume, true); //set breakpoint fast resume
@ -159,10 +159,10 @@ static void registercommands()
dbgcmdnew("GetBreakpointHitCount", cbDebugGetBPXHitCount, true); //get breakpoint hit count dbgcmdnew("GetBreakpointHitCount", cbDebugGetBPXHitCount, true); //get breakpoint hit count
dbgcmdnew("ResetBreakpointHitCount", cbDebugResetBPXHitCount, true); //reset breakpoint hit count dbgcmdnew("ResetBreakpointHitCount", cbDebugResetBPXHitCount, true); //reset breakpoint hit count
dbgcmdnew("SetHardwareBreakpointName\1bphwname", cbDebugSetBPXHardwareName, true); //set breakpoint name dbgcmdnew("SetHardwareBreakpointName,bphwname", cbDebugSetBPXHardwareName, true); //set breakpoint name
dbgcmdnew("SetHardwareBreakpointCondition\1bphwcond", cbDebugSetBPXHardwareCondition, true); //set breakpoint breakCondition dbgcmdnew("SetHardwareBreakpointCondition,bphwcond", cbDebugSetBPXHardwareCondition, true); //set breakpoint breakCondition
dbgcmdnew("SetHardwareBreakpointLog\1bphwlog", cbDebugSetBPXHardwareLog, true); //set breakpoint logText dbgcmdnew("SetHardwareBreakpointLog,bphwlog", cbDebugSetBPXHardwareLog, true); //set breakpoint logText
dbgcmdnew("SetHardwareBreakpointLogCondition\1bphwlogcondition", cbDebugSetBPXHardwareLogCondition, true); //set breakpoint logText dbgcmdnew("SetHardwareBreakpointLogCondition,bphwlogcondition", cbDebugSetBPXHardwareLogCondition, true); //set breakpoint logText
dbgcmdnew("SetHardwareBreakpointCommand", cbDebugSetBPXHardwareCommand, true); //set breakpoint command on hit dbgcmdnew("SetHardwareBreakpointCommand", cbDebugSetBPXHardwareCommand, true); //set breakpoint command on hit
dbgcmdnew("SetHardwareBreakpointCommandCondition", cbDebugSetBPXHardwareCommandCondition, true); //set breakpoint commandCondition dbgcmdnew("SetHardwareBreakpointCommandCondition", cbDebugSetBPXHardwareCommandCondition, true); //set breakpoint commandCondition
dbgcmdnew("SetHardwareBreakpointFastResume", cbDebugSetBPXHardwareFastResume, true); //set breakpoint fast resume dbgcmdnew("SetHardwareBreakpointFastResume", cbDebugSetBPXHardwareFastResume, true); //set breakpoint fast resume
@ -171,10 +171,10 @@ static void registercommands()
dbgcmdnew("GetHardwareBreakpointHitCount", cbDebugGetBPXHardwareHitCount, true); //get breakpoint hit count dbgcmdnew("GetHardwareBreakpointHitCount", cbDebugGetBPXHardwareHitCount, true); //get breakpoint hit count
dbgcmdnew("ResetHardwareBreakpointHitCount", cbDebugResetBPXHardwareHitCount, true); //reset breakpoint hit count dbgcmdnew("ResetHardwareBreakpointHitCount", cbDebugResetBPXHardwareHitCount, true); //reset breakpoint hit count
dbgcmdnew("SetMemoryBreakpointName\1bpmname", cbDebugSetBPXMemoryName, true); //set breakpoint name dbgcmdnew("SetMemoryBreakpointName,bpmname", cbDebugSetBPXMemoryName, true); //set breakpoint name
dbgcmdnew("SetMemoryBreakpointCondition\1bpmcond", cbDebugSetBPXMemoryCondition, true); //set breakpoint breakCondition dbgcmdnew("SetMemoryBreakpointCondition,bpmcond", cbDebugSetBPXMemoryCondition, true); //set breakpoint breakCondition
dbgcmdnew("SetMemoryBreakpointLog\1bpmlog", cbDebugSetBPXMemoryLog, true); //set breakpoint log dbgcmdnew("SetMemoryBreakpointLog,bpmlog", cbDebugSetBPXMemoryLog, true); //set breakpoint log
dbgcmdnew("SetMemoryBreakpointLogCondition\1bpmlogcondition", cbDebugSetBPXMemoryLogCondition, true); //set breakpoint logCondition dbgcmdnew("SetMemoryBreakpointLogCondition,bpmlogcondition", cbDebugSetBPXMemoryLogCondition, true); //set breakpoint logCondition
dbgcmdnew("SetMemoryBreakpointCommand", cbDebugSetBPXMemoryCommand, true); //set breakpoint command on hit dbgcmdnew("SetMemoryBreakpointCommand", cbDebugSetBPXMemoryCommand, true); //set breakpoint command on hit
dbgcmdnew("SetMemoryBreakpointCommandCondition", cbDebugSetBPXMemoryCommandCondition, true); //set breakpoint commandCondition dbgcmdnew("SetMemoryBreakpointCommandCondition", cbDebugSetBPXMemoryCommandCondition, true); //set breakpoint commandCondition
dbgcmdnew("SetMemoryBreakpointFastResume", cbDebugSetBPXMemoryFastResume, true); //set breakpoint fast resume dbgcmdnew("SetMemoryBreakpointFastResume", cbDebugSetBPXMemoryFastResume, true); //set breakpoint fast resume
@ -208,42 +208,42 @@ static void registercommands()
dbgcmdnew("ResetExceptionBreakpointHitCount", cbDebugResetBPXExceptionHitCount, true); //reset breakpoint hit count dbgcmdnew("ResetExceptionBreakpointHitCount", cbDebugResetBPXExceptionHitCount, true); //reset breakpoint hit count
//tracing //tracing
dbgcmdnew("TraceIntoConditional\1ticnd", cbDebugTraceIntoConditional, true); //Trace into conditional dbgcmdnew("TraceIntoConditional,ticnd", cbDebugTraceIntoConditional, true); //Trace into conditional
dbgcmdnew("TraceOverConditional\1tocnd", cbDebugTraceOverConditional, true); //Trace over conditional dbgcmdnew("TraceOverConditional,tocnd", cbDebugTraceOverConditional, true); //Trace over conditional
dbgcmdnew("TraceIntoBeyondTraceRecord\1tibt", cbDebugTraceIntoBeyondTraceRecord, true); //Trace into beyond trace record dbgcmdnew("TraceIntoBeyondTraceRecord,tibt", cbDebugTraceIntoBeyondTraceRecord, true); //Trace into beyond trace record
dbgcmdnew("TraceOverBeyondTraceRecord\1tobt", cbDebugTraceOverBeyondTraceRecord, true); //Trace over beyond trace record dbgcmdnew("TraceOverBeyondTraceRecord,tobt", cbDebugTraceOverBeyondTraceRecord, true); //Trace over beyond trace record
dbgcmdnew("TraceIntoIntoTraceRecord\1tiit", cbDebugTraceIntoIntoTraceRecord, true); //Trace into into trace record dbgcmdnew("TraceIntoIntoTraceRecord,tiit", cbDebugTraceIntoIntoTraceRecord, true); //Trace into into trace record
dbgcmdnew("TraceOverIntoTraceRecord\1toit", cbDebugTraceOverIntoTraceRecord, true); //Trace over into trace record dbgcmdnew("TraceOverIntoTraceRecord,toit", cbDebugTraceOverIntoTraceRecord, true); //Trace over into trace record
dbgcmdnew("RunToParty", cbDebugRunToParty, true); //Run to code in a party dbgcmdnew("RunToParty", cbDebugRunToParty, true); //Run to code in a party
dbgcmdnew("RunToUserCode\1rtu", cbDebugRunToUserCode, true); //Run to user code dbgcmdnew("RunToUserCode,rtu", cbDebugRunToUserCode, true); //Run to user code
dbgcmdnew("TraceSetLog\1SetTraceLog", cbDebugTraceSetLog, true); //Set trace log text + condition dbgcmdnew("TraceSetLog,SetTraceLog", cbDebugTraceSetLog, true); //Set trace log text + condition
dbgcmdnew("TraceSetCommand\1SetTraceCommand", cbDebugTraceSetCommand, true); //Set trace command text + condition dbgcmdnew("TraceSetCommand,SetTraceCommand", cbDebugTraceSetCommand, true); //Set trace command text + condition
dbgcmdnew("TraceSetSwitchCondition\1SetTraceSwitchCondition", cbDebugTraceSetSwitchCondition, true); //Set trace switch condition dbgcmdnew("TraceSetSwitchCondition,SetTraceSwitchCondition", cbDebugTraceSetSwitchCondition, true); //Set trace switch condition
//thread control //thread control
dbgcmdnew("createthread\1threadcreate\1newthread\1threadnew", cbDebugCreatethread, true); //create thread dbgcmdnew("createthread,threadcreate,newthread,threadnew", cbDebugCreatethread, true); //create thread
dbgcmdnew("switchthread\1threadswitch", cbDebugSwitchthread, true); //switch thread dbgcmdnew("switchthread,threadswitch", cbDebugSwitchthread, true); //switch thread
dbgcmdnew("suspendthread\1threadsuspend", cbDebugSuspendthread, true); //suspend thread dbgcmdnew("suspendthread,threadsuspend", cbDebugSuspendthread, true); //suspend thread
dbgcmdnew("resumethread\1threadresume", cbDebugResumethread, true); //resume thread dbgcmdnew("resumethread,threadresume", cbDebugResumethread, true); //resume thread
dbgcmdnew("killthread\1threadkill", cbDebugKillthread, true); //kill thread dbgcmdnew("killthread,threadkill", cbDebugKillthread, true); //kill thread
dbgcmdnew("suspendallthreads\1threadsuspendall", cbDebugSuspendAllThreads, true); //suspend all threads dbgcmdnew("suspendallthreads,threadsuspendall", cbDebugSuspendAllThreads, true); //suspend all threads
dbgcmdnew("resumeallthreads\1threadresumeall", cbDebugResumeAllThreads, true); //resume all threads dbgcmdnew("resumeallthreads,threadresumeall", cbDebugResumeAllThreads, true); //resume all threads
dbgcmdnew("setthreadpriority\1setprioritythread\1threadsetpriority", cbDebugSetPriority, true); //set thread priority dbgcmdnew("setthreadpriority,setprioritythread,threadsetpriority", cbDebugSetPriority, true); //set thread priority
dbgcmdnew("threadsetname\1setthreadname", cbDebugSetthreadname, true); //set thread name dbgcmdnew("threadsetname,setthreadname", cbDebugSetthreadname, true); //set thread name
//memory operations //memory operations
dbgcmdnew("alloc", cbDebugAlloc, true); //allocate memory dbgcmdnew("alloc", cbDebugAlloc, true); //allocate memory
dbgcmdnew("free", cbDebugFree, true); //free memory dbgcmdnew("free", cbDebugFree, true); //free memory
dbgcmdnew("Fill\1memset", cbDebugMemset, true); //memset dbgcmdnew("Fill,memset", cbDebugMemset, true); //memset
dbgcmdnew("getpagerights\1getrightspage", cbDebugGetPageRights, true); dbgcmdnew("getpagerights,getrightspage", cbDebugGetPageRights, true);
dbgcmdnew("setpagerights\1setrightspage", cbDebugSetPageRights, true); dbgcmdnew("setpagerights,setrightspage", cbDebugSetPageRights, true);
dbgcmdnew("savedata", cbInstrSavedata, true); //save data to disk dbgcmdnew("savedata", cbInstrSavedata, true); //save data to disk
//operating system control //operating system control
dbgcmdnew("GetPrivilegeState", cbGetPrivilegeState, true); //get priv state dbgcmdnew("GetPrivilegeState", cbGetPrivilegeState, true); //get priv state
dbgcmdnew("EnablePrivilege", cbEnablePrivilege, true); //enable priv dbgcmdnew("EnablePrivilege", cbEnablePrivilege, true); //enable priv
dbgcmdnew("DisablePrivilege", cbDisablePrivilege, true); //disable priv dbgcmdnew("DisablePrivilege", cbDisablePrivilege, true); //disable priv
dbgcmdnew("handleclose\1closehandle", cbHandleClose, true); //close remote handle dbgcmdnew("handleclose,closehandle", cbHandleClose, true); //close remote handle
//watch control //watch control
dbgcmdnew("AddWatch", cbAddWatch, true); // add watch dbgcmdnew("AddWatch", cbAddWatch, true); // add watch
@ -254,46 +254,46 @@ static void registercommands()
dbgcmdnew("CheckWatchdog", cbCheckWatchdog, true); // Watchdog dbgcmdnew("CheckWatchdog", cbCheckWatchdog, true); // Watchdog
//variables //variables
dbgcmdnew("varnew\1var", cbInstrVar, false); //make a variable arg1:name,[arg2:value] dbgcmdnew("varnew,var", cbInstrVar, false); //make a variable arg1:name,[arg2:value]
dbgcmdnew("vardel", cbInstrVarDel, false); //delete a variable, arg1:variable name dbgcmdnew("vardel", cbInstrVarDel, false); //delete a variable, arg1:variable name
dbgcmdnew("varlist", cbInstrVarList, false); //list variables[arg1:type filter] dbgcmdnew("varlist", cbInstrVarList, false); //list variables[arg1:type filter]
//searching //searching
dbgcmdnew("find", cbInstrFind, true); //find a pattern dbgcmdnew("find", cbInstrFind, true); //find a pattern
dbgcmdnew("findall", cbInstrFindAll, true); //find all patterns dbgcmdnew("findall", cbInstrFindAll, true); //find all patterns
dbgcmdnew("findallmem\1findmemall", cbInstrFindAllMem, true); //memory map pattern find dbgcmdnew("findallmem,findmemall", cbInstrFindAllMem, true); //memory map pattern find
dbgcmdnew("findasm\1asmfind", cbInstrFindAsm, true); //find instruction dbgcmdnew("findasm,asmfind", cbInstrFindAsm, true); //find instruction
dbgcmdnew("reffind\1findref\1ref", cbInstrRefFind, true); //find references to a value dbgcmdnew("reffind,findref,ref", cbInstrRefFind, true); //find references to a value
dbgcmdnew("reffindrange\1findrefrange\1refrange", cbInstrRefFindRange, true); dbgcmdnew("reffindrange,findrefrange,refrange", cbInstrRefFindRange, true);
dbgcmdnew("refstr\1strref", cbInstrRefStr, true); //find string references dbgcmdnew("refstr,strref", cbInstrRefStr, true); //find string references
dbgcmdnew("modcallfind", cbInstrModCallFind, true); //find intermodular calls dbgcmdnew("modcallfind", cbInstrModCallFind, true); //find intermodular calls
dbgcmdnew("yara", cbInstrYara, true); //yara test command dbgcmdnew("yara", cbInstrYara, true); //yara test command
dbgcmdnew("yaramod", cbInstrYaramod, true); //yara rule on module dbgcmdnew("yaramod", cbInstrYaramod, true); //yara rule on module
dbgcmdnew("setmaxfindresult\1findsetmaxresult", cbInstrSetMaxFindResult, false); //set the maximum number of occurences found dbgcmdnew("setmaxfindresult,findsetmaxresult", cbInstrSetMaxFindResult, false); //set the maximum number of occurences found
dbgcmdnew("guidfind\1findguid", cbInstrGUIDFind, true); //find GUID references TODO: undocumented dbgcmdnew("guidfind,findguid", cbInstrGUIDFind, true); //find GUID references TODO: undocumented
//user database //user database
dbgcmdnew("dbsave\1savedb", cbInstrDbsave, true); //save program database dbgcmdnew("dbsave,savedb", cbInstrDbsave, true); //save program database
dbgcmdnew("dbload\1loaddb", cbInstrDbload, true); //load program database dbgcmdnew("dbload,loaddb", cbInstrDbload, true); //load program database
dbgcmdnew("dbclear\1cleardb", cbInstrDbclear, true); //clear program database dbgcmdnew("dbclear,cleardb", cbInstrDbclear, true); //clear program database
dbgcmdnew("commentset\1cmt\1cmtset", cbInstrCommentSet, true); //set/edit comment dbgcmdnew("commentset,cmt,cmtset", cbInstrCommentSet, true); //set/edit comment
dbgcmdnew("commentdel\1cmtc\1cmtdel", cbInstrCommentDel, true); //delete comment dbgcmdnew("commentdel,cmtc,cmtdel", cbInstrCommentDel, true); //delete comment
dbgcmdnew("commentlist", cbInstrCommentList, true); //list comments dbgcmdnew("commentlist", cbInstrCommentList, true); //list comments
dbgcmdnew("commentclear", cbInstrCommentClear, true); //clear comments dbgcmdnew("commentclear", cbInstrCommentClear, true); //clear comments
dbgcmdnew("labelset\1lbl\1lblset", cbInstrLabelSet, true); //set/edit label dbgcmdnew("labelset,lbl,lblset", cbInstrLabelSet, true); //set/edit label
dbgcmdnew("labeldel\1lblc\1lbldel", cbInstrLabelDel, true); //delete label dbgcmdnew("labeldel,lblc,lbldel", cbInstrLabelDel, true); //delete label
dbgcmdnew("labellist", cbInstrLabelList, true); //list labels dbgcmdnew("labellist", cbInstrLabelList, true); //list labels
dbgcmdnew("labelclear", cbInstrLabelClear, true); //clear labels dbgcmdnew("labelclear", cbInstrLabelClear, true); //clear labels
dbgcmdnew("bookmarkset\1bookmark", cbInstrBookmarkSet, true); //set bookmark dbgcmdnew("bookmarkset,bookmark", cbInstrBookmarkSet, true); //set bookmark
dbgcmdnew("bookmarkdel\1bookmarkc", cbInstrBookmarkDel, true); //delete bookmark dbgcmdnew("bookmarkdel,bookmarkc", cbInstrBookmarkDel, true); //delete bookmark
dbgcmdnew("bookmarklist", cbInstrBookmarkList, true); //list bookmarks dbgcmdnew("bookmarklist", cbInstrBookmarkList, true); //list bookmarks
dbgcmdnew("bookmarkclear", cbInstrBookmarkClear, true); //clear bookmarks dbgcmdnew("bookmarkclear", cbInstrBookmarkClear, true); //clear bookmarks
dbgcmdnew("functionadd\1func", cbInstrFunctionAdd, true); //function dbgcmdnew("functionadd,func", cbInstrFunctionAdd, true); //function
dbgcmdnew("functiondel\1funcc", cbInstrFunctionDel, true); //function dbgcmdnew("functiondel,funcc", cbInstrFunctionDel, true); //function
dbgcmdnew("functionlist", cbInstrFunctionList, true); //list functions dbgcmdnew("functionlist", cbInstrFunctionList, true); //list functions
dbgcmdnew("functionclear", cbInstrFunctionClear, false); //delete all functions dbgcmdnew("functionclear", cbInstrFunctionClear, false); //delete all functions
@ -308,40 +308,40 @@ static void registercommands()
dbgcmdnew("loopclear", cbInstrLoopClear, true); //clear loops TODO: undocumented dbgcmdnew("loopclear", cbInstrLoopClear, true); //clear loops TODO: undocumented
//analysis //analysis
dbgcmdnew("analyse\1analyze\1anal", cbInstrAnalyse, true); //secret analysis command dbgcmdnew("analyse,analyze,anal", cbInstrAnalyse, true); //secret analysis command
dbgcmdnew("exanal\1exanalyse\1exanalyze", cbInstrExanalyse, true); //exception directory analysis dbgcmdnew("exanal,exanalyse,exanalyze", cbInstrExanalyse, true); //exception directory analysis
dbgcmdnew("cfanal\1cfanalyse\1cfanalyze", cbInstrCfanalyse, true); //control flow analysis dbgcmdnew("cfanal,cfanalyse,cfanalyze", cbInstrCfanalyse, true); //control flow analysis
dbgcmdnew("analyse_nukem\1analyze_nukem\1anal_nukem", cbInstrAnalyseNukem, true); //secret analysis command #2 dbgcmdnew("analyse_nukem,analyze_nukem,anal_nukem", cbInstrAnalyseNukem, true); //secret analysis command #2
dbgcmdnew("analxrefs\1analx", cbInstrAnalxrefs, true); //analyze xrefs dbgcmdnew("analxrefs,analx", cbInstrAnalxrefs, true); //analyze xrefs
dbgcmdnew("analrecur\1analr", cbInstrAnalrecur, true); //analyze a single function dbgcmdnew("analrecur,analr", cbInstrAnalrecur, true); //analyze a single function
dbgcmdnew("analadv", cbInstrAnalyseadv, true); //analyze xref,function and data dbgcmdnew("analadv", cbInstrAnalyseadv, true); //analyze xref,function and data
dbgcmdnew("traceexecute", cbInstrTraceexecute, true); //execute trace record on address TODO: undocumented dbgcmdnew("traceexecute", cbInstrTraceexecute, true); //execute trace record on address TODO: undocumented
dbgcmdnew("virtualmod", cbInstrVirtualmod, true); //virtual module dbgcmdnew("virtualmod", cbInstrVirtualmod, true); //virtual module
dbgcmdnew("symdownload\1downloadsym", cbDebugDownloadSymbol, true); //download symbols dbgcmdnew("symdownload,downloadsym", cbDebugDownloadSymbol, true); //download symbols
dbgcmdnew("imageinfo\1modimageinfo", cbInstrImageinfo, true); //print module image information dbgcmdnew("imageinfo,modimageinfo", cbInstrImageinfo, true); //print module image information
dbgcmdnew("GetRelocSize\1grs", cbInstrGetRelocSize, true); //get relocation table size dbgcmdnew("GetRelocSize,grs", cbInstrGetRelocSize, true); //get relocation table size
dbgcmdnew("exhandlers", cbInstrExhandlers, true); //enumerate exception handlers dbgcmdnew("exhandlers", cbInstrExhandlers, true); //enumerate exception handlers
dbgcmdnew("exinfo", cbInstrExinfo, true); //dump last exception information dbgcmdnew("exinfo", cbInstrExinfo, true); //dump last exception information
//types //types
dbgcmdnew("DataUnknown", cbInstrDataUnknown, true); //mark as Unknown dbgcmdnew("DataUnknown", cbInstrDataUnknown, true); //mark as Unknown
dbgcmdnew("DataByte\1db", cbInstrDataByte, true); //mark as Byte dbgcmdnew("DataByte,db", cbInstrDataByte, true); //mark as Byte
dbgcmdnew("DataWord\1dw", cbInstrDataWord, true); //mark as Word dbgcmdnew("DataWord,dw", cbInstrDataWord, true); //mark as Word
dbgcmdnew("DataDword\1dd", cbInstrDataDword, true); //mark as Dword dbgcmdnew("DataDword,dd", cbInstrDataDword, true); //mark as Dword
dbgcmdnew("DataFword", cbInstrDataFword, true); //mark as Fword dbgcmdnew("DataFword", cbInstrDataFword, true); //mark as Fword
dbgcmdnew("DataQword\1dq", cbInstrDataQword, true); //mark as Qword dbgcmdnew("DataQword,dq", cbInstrDataQword, true); //mark as Qword
dbgcmdnew("DataTbyte", cbInstrDataTbyte, true); //mark as Tbyte dbgcmdnew("DataTbyte", cbInstrDataTbyte, true); //mark as Tbyte
dbgcmdnew("DataOword", cbInstrDataOword, true); //mark as Oword dbgcmdnew("DataOword", cbInstrDataOword, true); //mark as Oword
dbgcmdnew("DataMmword", cbInstrDataMmword, true); //mark as Mmword dbgcmdnew("DataMmword", cbInstrDataMmword, true); //mark as Mmword
dbgcmdnew("DataXmmword", cbInstrDataXmmword, true); //mark as Xmmword dbgcmdnew("DataXmmword", cbInstrDataXmmword, true); //mark as Xmmword
dbgcmdnew("DataYmmword", cbInstrDataYmmword, true); //mark as Ymmword dbgcmdnew("DataYmmword", cbInstrDataYmmword, true); //mark as Ymmword
dbgcmdnew("DataFloat\1DataReal4\1df", cbInstrDataFloat, true); //mark as Float dbgcmdnew("DataFloat,DataReal4,df", cbInstrDataFloat, true); //mark as Float
dbgcmdnew("DataDouble\1DataReal8", cbInstrDataDouble, true); //mark as Double dbgcmdnew("DataDouble,DataReal8", cbInstrDataDouble, true); //mark as Double
dbgcmdnew("DataLongdouble\1DataReal10", cbInstrDataLongdouble, true); //mark as Longdouble dbgcmdnew("DataLongdouble,DataReal10", cbInstrDataLongdouble, true); //mark as Longdouble
dbgcmdnew("DataAscii\1da", cbInstrDataAscii, true); //mark as Ascii dbgcmdnew("DataAscii,da", cbInstrDataAscii, true); //mark as Ascii
dbgcmdnew("DataUnicode\1du", cbInstrDataUnicode, true); //mark as Unicode dbgcmdnew("DataUnicode,du", cbInstrDataUnicode, true); //mark as Unicode
dbgcmdnew("DataCode\1dc", cbInstrDataCode, true); //mark as Code dbgcmdnew("DataCode,dc", cbInstrDataCode, true); //mark as Code
dbgcmdnew("DataJunk", cbInstrDataJunk, true); //mark as Junk dbgcmdnew("DataJunk", cbInstrDataJunk, true); //mark as Junk
dbgcmdnew("DataMiddle", cbInstrDataMiddle, true); //mark as Middle dbgcmdnew("DataMiddle", cbInstrDataMiddle, true); //mark as Middle
@ -362,19 +362,19 @@ static void registercommands()
dbgcmdnew("ParseTypes", cbInstrParseTypes, false); //ParseTypes dbgcmdnew("ParseTypes", cbInstrParseTypes, false); //ParseTypes
//plugins //plugins
dbgcmdnew("StartScylla\1scylla\1imprec", cbDebugStartScylla, false); //start scylla dbgcmdnew("StartScylla,scylla,imprec", cbDebugStartScylla, false); //start scylla
dbgcmdnew("plugload\1pluginload\1loadplugin", cbInstrPluginLoad, false); //load plugin dbgcmdnew("plugload,pluginload,loadplugin", cbInstrPluginLoad, false); //load plugin
dbgcmdnew("plugunload\1pluginunload\1unloadplugin", cbInstrPluginUnload, false); //unload plugin dbgcmdnew("plugunload,pluginunload,unloadplugin", cbInstrPluginUnload, false); //unload plugin
//script //script
dbgcmdnew("scriptload", cbScriptLoad, false); dbgcmdnew("scriptload", cbScriptLoad, false);
dbgcmdnew("msg", cbScriptMsg, false); dbgcmdnew("msg", cbScriptMsg, false);
dbgcmdnew("msgyn", cbScriptMsgyn, false); dbgcmdnew("msgyn", cbScriptMsgyn, false);
dbgcmdnew("log", cbInstrLog, false); //log command with superawesome hax dbgcmdnew("log", cbInstrLog, false); //log command with superawesome hax
dbgcmdnew("scriptdll\1dllscript", cbScriptDll, false); //execute a script DLL dbgcmdnew("scriptdll,dllscript", cbScriptDll, false); //execute a script DLL
//gui //gui
dbgcmdnew("disasm\1dis\1d", cbDebugDisasm, true); //doDisasm dbgcmdnew("disasm,dis,d", cbDebugDisasm, true); //doDisasm
dbgcmdnew("dump", cbDebugDump, true); //dump at address dbgcmdnew("dump", cbDebugDump, true); //dump at address
dbgcmdnew("sdump", cbDebugStackDump, true); //dump at stack address dbgcmdnew("sdump", cbDebugStackDump, true); //dump at stack address
dbgcmdnew("memmapdump", cbDebugMemmapdump, true); dbgcmdnew("memmapdump", cbDebugMemmapdump, true);
@ -385,50 +385,50 @@ static void registercommands()
dbgcmdnew("refinit", cbInstrRefinit, false); dbgcmdnew("refinit", cbInstrRefinit, false);
dbgcmdnew("refadd", cbInstrRefadd, false); dbgcmdnew("refadd", cbInstrRefadd, false);
dbgcmdnew("refget", cbInstrRefGet, false); dbgcmdnew("refget", cbInstrRefGet, false);
dbgcmdnew("EnableLog\1LogEnable", cbInstrEnableLog, false); //enable log dbgcmdnew("EnableLog,LogEnable", cbInstrEnableLog, false); //enable log
dbgcmdnew("DisableLog\1LogDisable", cbInstrDisableLog, false); //disable log dbgcmdnew("DisableLog,LogDisable", cbInstrDisableLog, false); //disable log
dbgcmdnew("ClearLog\1cls\1lc\1lclr", cbClearLog, false); //clear the log dbgcmdnew("ClearLog,cls,lc,lclr", cbClearLog, false); //clear the log
dbgcmdnew("AddFavouriteTool", cbInstrAddFavTool, false); //add favourite tool dbgcmdnew("AddFavouriteTool", cbInstrAddFavTool, false); //add favourite tool
dbgcmdnew("AddFavouriteCommand", cbInstrAddFavCmd, false); //add favourite command dbgcmdnew("AddFavouriteCommand", cbInstrAddFavCmd, false); //add favourite command
dbgcmdnew("AddFavouriteToolShortcut\1SetFavouriteToolShortcut", cbInstrSetFavToolShortcut, false); //set favourite tool shortcut dbgcmdnew("AddFavouriteToolShortcut,SetFavouriteToolShortcut", cbInstrSetFavToolShortcut, false); //set favourite tool shortcut
dbgcmdnew("FoldDisassembly", cbInstrFoldDisassembly, true); //fold disassembly segment dbgcmdnew("FoldDisassembly", cbInstrFoldDisassembly, true); //fold disassembly segment
//misc //misc
dbgcmdnew("chd", cbInstrChd, false); //Change directory dbgcmdnew("chd", cbInstrChd, false); //Change directory
dbgcmdnew("zzz\1doSleep", cbInstrZzz, false); //sleep dbgcmdnew("zzz,doSleep", cbInstrZzz, false); //sleep
dbgcmdnew("HideDebugger\1dbh\1hide", cbDebugHide, true); //HideDebugger dbgcmdnew("HideDebugger,dbh,hide", cbDebugHide, true); //HideDebugger
dbgcmdnew("loadlib", cbDebugLoadLib, true); //Load DLL dbgcmdnew("loadlib", cbDebugLoadLib, true); //Load DLL
dbgcmdnew("freelib", cbDebugFreeLib, true); //Unload DLL TODO: undocumented dbgcmdnew("freelib", cbDebugFreeLib, true); //Unload DLL TODO: undocumented
dbgcmdnew("asm", cbInstrAssemble, true); //assemble instruction dbgcmdnew("asm", cbInstrAssemble, true); //assemble instruction
dbgcmdnew("gpa", cbInstrGpa, true); //get proc address dbgcmdnew("gpa", cbInstrGpa, true); //get proc address
dbgcmdnew("setjit\1jitset", cbDebugSetJIT, false); //set JIT dbgcmdnew("setjit,jitset", cbDebugSetJIT, false); //set JIT
dbgcmdnew("getjit\1jitget", cbDebugGetJIT, false); //get JIT dbgcmdnew("getjit,jitget", cbDebugGetJIT, false); //get JIT
dbgcmdnew("getjitauto\1jitgetauto", cbDebugGetJITAuto, false); //get JIT Auto dbgcmdnew("getjitauto,jitgetauto", cbDebugGetJITAuto, false); //get JIT Auto
dbgcmdnew("setjitauto\1jitsetauto", cbDebugSetJITAuto, false); //set JIT Auto dbgcmdnew("setjitauto,jitsetauto", cbDebugSetJITAuto, false); //set JIT Auto
dbgcmdnew("getcommandline\1getcmdline", cbDebugGetCmdline, true); //Get CmdLine dbgcmdnew("getcommandline,getcmdline", cbDebugGetCmdline, true); //Get CmdLine
dbgcmdnew("setcommandline\1setcmdline", cbDebugSetCmdline, true); //Set CmdLine dbgcmdnew("setcommandline,setcmdline", cbDebugSetCmdline, true); //Set CmdLine
dbgcmdnew("mnemonichelp", cbInstrMnemonichelp, false); //mnemonic help dbgcmdnew("mnemonichelp", cbInstrMnemonichelp, false); //mnemonic help
dbgcmdnew("mnemonicbrief", cbInstrMnemonicbrief, false); //mnemonic brief dbgcmdnew("mnemonicbrief", cbInstrMnemonicbrief, false); //mnemonic brief
dbgcmdnew("config", cbInstrConfig, false); //get or set config uint dbgcmdnew("config", cbInstrConfig, false); //get or set config uint
dbgcmdnew("restartadmin\1runas\1adminrestart", cbInstrRestartadmin, false); //restart x64dbg as administrator dbgcmdnew("restartadmin,runas,adminrestart", cbInstrRestartadmin, false); //restart x64dbg as administrator
//undocumented //undocumented
dbgcmdnew("bench", cbDebugBenchmark, true); //benchmark test (readmem etc) dbgcmdnew("bench", cbDebugBenchmark, true); //benchmark test (readmem etc)
dbgcmdnew("dprintf", cbPrintf, false); //printf dbgcmdnew("dprintf", cbPrintf, false); //printf
dbgcmdnew("setstr\1strset", cbInstrSetstr, false); //set a string variable dbgcmdnew("setstr,strset", cbInstrSetstr, false); //set a string variable
dbgcmdnew("getstr\1strget", cbInstrGetstr, false); //get a string variable dbgcmdnew("getstr,strget", cbInstrGetstr, false); //get a string variable
dbgcmdnew("copystr\1strcpy", cbInstrCopystr, true); //write a string variable to memory dbgcmdnew("copystr,strcpy", cbInstrCopystr, true); //write a string variable to memory
dbgcmdnew("capstone", cbInstrCapstone, true); //disassemble using capstone dbgcmdnew("capstone", cbInstrCapstone, true); //disassemble using capstone
dbgcmdnew("visualize", cbInstrVisualize, true); //visualize analysis dbgcmdnew("visualize", cbInstrVisualize, true); //visualize analysis
dbgcmdnew("meminfo", cbInstrMeminfo, true); //command to debug memory map bugs dbgcmdnew("meminfo", cbInstrMeminfo, true); //command to debug memory map bugs
dbgcmdnew("briefcheck", cbInstrBriefcheck, true); //check if mnemonic briefs are missing dbgcmdnew("briefcheck", cbInstrBriefcheck, true); //check if mnemonic briefs are missing
dbgcmdnew("focusinfo", cbInstrFocusinfo, false); dbgcmdnew("focusinfo", cbInstrFocusinfo, false);
dbgcmdnew("printstack\1logstack", cbInstrPrintStack, true); //print the call stack dbgcmdnew("printstack,logstack", cbInstrPrintStack, true); //print the call stack
}; };
bool cbCommandProvider(char* cmd, int maxlen) bool cbCommandProvider(char* cmd, int maxlen)

View File

@ -188,13 +188,13 @@ void CommandLineEdit::autoCompleteUpdate(const QString text)
void CommandLineEdit::autoCompleteAddCmd(const QString cmd) void CommandLineEdit::autoCompleteAddCmd(const QString cmd)
{ {
mDefaultCompletions << cmd.split(QChar('\1'), QString::SkipEmptyParts); mDefaultCompletions << cmd.split(QChar(','), QString::SkipEmptyParts);
mDefaultCompletions.removeDuplicates(); mDefaultCompletions.removeDuplicates();
} }
void CommandLineEdit::autoCompleteDelCmd(const QString cmd) void CommandLineEdit::autoCompleteDelCmd(const QString cmd)
{ {
QStringList deleteList = cmd.split(QChar('\1'), QString::SkipEmptyParts); QStringList deleteList = cmd.split(QChar(','), QString::SkipEmptyParts);
for(int i = 0; i < deleteList.size(); i++) for(int i = 0; i < deleteList.size(); i++)
mDefaultCompletions.removeAll(deleteList.at(i)); mDefaultCompletions.removeAll(deleteList.at(i));