This commit is contained in:
aozhiwei 2022-04-26 13:31:08 +08:00
parent a831f59035
commit ff53825f43
3 changed files with 0 additions and 214 deletions

View File

@ -1,37 +0,0 @@
import os
import time
import pychrome
import cmd
import scriptmgr
#os.environ['DEBUG'] = '1'
def initTab(tab):
tab.call_method("Network.enable", maxPostDataSize=65536)
tab.call_method("Page.enable")
tab.call_method("Page.getResourceTree")
tab.call_method("Profiler.enable")
tab.call_method("Runtime.enable")
tab.call_method("Debugger.enable", maxScriptsCacheSzie=1000000)
tab.call_method("DOM.enable")
tab.call_method("CSS.enable")
tab.call_method("Overlay.enable")
tab.call_method("Log.enable")
browser = pychrome.Browser(url="http://192.168.100.137:9223")
tab = browser.new_tab()
scriptmgr = scriptmgr.ScriptMgr(tab)
tab.start()
initTab(tab)
tab.call_method("Page.navigate", url="http://localhost:7456/", _timeout=5)
time.sleep(3)
cmd.processCmd(browser, tab, scriptmgr, 'b jcmatchvs.js:102')
while True:
cmdline= input('(cdb)').strip()
try:
cmd.processCmd(browser, tab, scriptmgr, cmdline)
time.sleep(0.1)
except Exception as e:
print(e)

View File

@ -1,105 +0,0 @@
g_cmdstr = ''
def _getCmdParam():
return g_cmdstr[1:]
def _b_cmd(browser, tab, scriptmgr, params):
filename = params[0].split(':')[0]
line = int(params[0].split(':')[1])
url = scriptmgr.getUrl(filename)
print(params, url)
tab.call_method("Debugger.setBreakpointByUrl",
lineNumber=line,
url=url,
columnNumber=0,
condition=''
)
def _bc_cmd(browser, tab, scriptmgr, params):
filename = params[0].split(':')[0]
line = int(params[0].split(':')[1])
url = scriptmgr.getUrl(filename)
print(params, url)
tab.call_method("Debugger.setBreakpointByUrl",
lineNumber=line,
url=url,
columnNumber=0,
condition=''
)
def _bt_cmd(browser, tab, scriptmgr, params):
scriptmgr.dumpStack()
def _p_cmd(browser, tab, scriptmgr, params):
tab.call_method("Debugger.evaluateOnCallFrame",
callFrameId=scriptmgr.getFrameId(),
expression='console.log(' + _getCmdParam() + ')'
)
def _f_cmd(browser, tab, scriptmgr, params):
scriptmgr.curr_frame = int(params[0])
def _n_cmd(browser, tab, scriptmgr, params):
tab.call_method("Debugger.pause")
def _s_cmd(browser, tab, scriptmgr, params):
tab.call_method("Debugger.stepInto")
def _c_cmd(browser, tab, scriptmgr, params):
tab.call_method("Debugger.resume")
def _sout_cmd(browser, tab, scriptmgr, params):
tab.call_method("Debugger.stepOut")
def _sover_cmd(browser, tab, scriptmgr, params):
tab.call_method("Debugger.stepOver")
def _debugon_cmd(browser, tab, scriptmgr, params):
tab.debug = True
print('debug on')
def _debugoff_cmd(browser, tab, scriptmgr, params):
tab.debug = False
print('debug off')
def _exit_cmd(browser, tab, scriptmgr, params):
print('quit')
exit(0)
def _processCdbCmd(cmd_str, browser, tab, scriptmgr):
global g_cmdstr
g_cmdstr = cmd_str
cmdlist = cmd_str.split(' ')
if len(cmdlist) < 1:
return
cmd_hash = {
'b': _b_cmd,
'bc': _bc_cmd,
'bt': _bt_cmd,
'p': _p_cmd,
'f': _f_cmd,
'n': _n_cmd,
's': _s_cmd,
'sout': _sout_cmd,
'sover': _sover_cmd,
'c': _c_cmd,
'debugon': _debugon_cmd,
'debugoff': _debugoff_cmd,
'q': _exit_cmd,
}
if cmdlist[0] in cmd_hash:
cmd_hash[cmdlist[0]](browser, tab, scriptmgr, cmdlist[1:])
else:
print('not found %s cmd' % cmdlist[0])
def processCmd(browser, tab, scriptmgr, cmdline):
try:
if len(cmdline) > 0 :
if cmdline[0] == '!':
msg = eval(cmdline[1:])
else:
_processCdbCmd(cmdline, browser, tab, scriptmgr)
except Exception as e:
print(e)

View File

@ -1,72 +0,0 @@
import json
import pprint
def getShortUrl(url):
return url.replace('http://localhost:7456/', '')
class ScriptMgr:
def __init__(self, tab):
self.curr_frame = 0
self.frames = []
self.scripts = []
self.tab = tab
self.tab.set_listener('Debugger.scriptParsed', self.onScriptParsed)
self.tab.set_listener('Debugger.breakpointResolved', self.onBreakpointResolved)
self.tab.set_listener('Debugger.paused', self.onPaused)
self.tab.set_listener('Debugger.resumed', self.onResumed)
self.tab.set_listener('Debugger.scriptFailedToParse', self.onScriptFailedToParse)
self.tab.set_listener('Runtime.consoleAPICalled', self.consoleAPICalled)
def onScriptParsed(self, **kwargs):
self.scripts.append(kwargs)
def onBreakpointResolved(self, **kwargs):
print('onBreakpointResolved')
def onPaused(self, **kwargs):
# print('onPaused')
self.frames = []
for frame in kwargs['callFrames']:
self.frames.append(frame)
pprint.pprint('%s:%d' %
(
getShortUrl(self.frames[0]['url']),
self.frames[0]['location']['lineNumber']
)
)
def onResumed(self, **kwargs):
print('onResumed')
def onScriptFailedToParse(self, **kwargs):
print('onScriptFailedToParse', kwargs['url'])
def consoleAPICalled(self, **kwargs):
for prop in kwargs['args']:
if prop['type'] == 'object':
pprint.pprint(prop['preview']['properties'])
else:
print('%s' % (str(prop['value'])))
def getUrl(self, filename):
for script in self.scripts:
if filename in script['url']:
return script['url']
return None
def dumpStack(self):
for frame in self.frames:
print('%30s %s:%d' %
(
frame['functionName'] + ':' +
str(json.loads(frame['callFrameId'])['ordinal']) + ':' +
str(json.loads(frame['callFrameId'])['injectedScriptId']),
getShortUrl(frame['url']),
frame['functionLocation']['lineNumber'],
)
)
def getFrameId(self):
return self.frames[self.curr_frame]['callFrameId']