输入”pudb3 rpdb2.py -d hello.py“命令之后,就会启动一个被调试器,其实现原理如何?
入口函数
run_rpdb2(),在14774行。
run_rpdb2()
函数定义,def run_rpdb2(),在14752行。
处理过程:
1、【待分析】调用rpdb2.main()函数。
2、如果设置了g_fbreakonexit,则调用rpdb2.setbreak()。
目前暂时也用不到,所以不用理会。
main函数
这个才是关键函数,函数原型如下:
def main(StartClient_func = StartClient, version = RPDB_TITLE)
StartClient_func :其值设置为StartClient,是一个函数,在当前的情况下,不会用到,所以不用管。
version :版本信息,也是无关紧要的东西,不用管。
处理过程:
1、引入了一些全局变量。
2、创建一些配置相关的目录。
3、解析用户输入的参数信息。
4、定义了一些局部变量,并且根据用户输入参数设置这些变量。
这里面的关键变量是fWrap,这个变量指示了当前程序是作为debuggee来启动。
5、要求用户输入密码。
这里输入的密码是'a'。
6、调用StartServer()函数。
这个是关键函数,因为往下执行不下去了,卡在这里了。
StartServer(_rpdb2_args, fchdir, _rpdb2_pwd, fAllowUnencrypted, fAllowRemote, secret)
_rpdb2_args:这里面是'hello.py'
fchdir:指示是否进入到目标目录。当前是False。
_rpdb2_pwd:此处是'a'。
fAllowUnencrypted:为True。
fAllowRemote:此处为False。
secret:为空字符串。
网友评论