26
2019.2

调试方法

作者: POPASP
在前面讲过,可以将配置参数APP_DEBUG值设为1进入调试模式,同时结合调试的固定格式 ```brush:vb Class Action或Model Sub Mehtod on error resume next '这里写你的代码 Call L_("类名.方法名") End Sub End Class ``` 进行调试,但是调试模式并不能完全满足我们调试的需要,有时候我们需要手动的输出一些调试信息。除了本身可以借助一些开发工具进行调试外,POPASP还提供了一些内置的调试函数和类库。 ### 将变量输出到浏览器调试 变量调试可以通过var_export来进行,它不仅可以输出标量、还可以输出绝大多数对象,比如: ```brush:vb var_export POP_MVC ``` 则输出 ```brush:xml { "typename": "POPASP_MVC", "private_vars": [ "objExtendsClass", "action_count", "is_init_popasp", "isExit", "dAction", "isExecuteExtends", "dict_auto_key", "spent_limit", "isPageCache", "ctrl_son", "method_exists", "temp_ctrl" ], "public_vars": [ "appPath", "applicationOn", "mvc_dir", "root_path", "config", "Version", "fso", "reg", "Apt", "Dict", "File", "Url", "Uploader", "Arr", "[String]", "c", "a", "dRejection", "dSql", "dTpl", "dFlow", "dTime", "dMd5", "dClass", "dPlugin", "dModel", "dDict", "dMSSoft", "dG_", "dN_", "dL_", "dJS", "dbTOOL", "tpl_vars", "page_trace_include", "dObj" ], "private_method": [ "get_root_path", "get_mvc_dir", "Class_Initialize", "Class_Terminate", "ctrl_file_not_exists_handler", "ctrl_not_exists_handler", "method_not_exists_handler", "ctrl_code_error_handler", "echo", "import_application", "get_mvc_class_path", "get_class_in_apt_key", "Action_", "ctrl_error" ], "public_method": [ "init", "Notice", "Warning", "Error", "pushTime", "Logo", "CreateDict", "IsInstall", "SCO", "CreateStream", "extract_get", "extract_form", "getModelRunName", "getModelPath", "getModelDstPath", "initUploader", "UCFirst", "ltrim", "rtrim", "trim", "URLDecode", "Post", "Upload", "Download", "isPopasp", "isAction", "isModel", "getDictAutoKey", "Form2Dict", "get_ctrl_name", "get_action_name", "Action", "Model", "getMvcDir", "apt_clear", "setConfig", "getConfig", "Unset", "isScalar", "get_ctrl_path", "ajax", "file_append_contents", "file_get_contents", "stream_get_contents", "file_put_contents", "stream_put_contents", "CreateFolder", "asp_get_contents", "show_page_trace", "import", "import_with_key", "import_plugin", "exit", "quit", "get_import_asp", "rs2dict", "rs2arr", "count", "realPath", "NoCache", "Show", "Get", "Form", "isGet", "isPost", "isAjax", "start", "run" ] } ``` 所有的框架基类都可以以这样的json格式输出,输出类型、私有属性、公有属性、私有方法、公有方法。 比如在控制器或Model内部输出 ```brush:vb var_export Me ``` 也将以json形式输出。 再比如输出Recordeset变量 ```brush:xml var_export rs ``` 会将Recordset变量转化成二维Dictionary的json形式输出。 ### 将变量输出到文件调试 如果是ajax下调试,就不能使用var_export进行调试了,这时候需要使用file_var_export进行调试,它是一个sub过程,共两个参数,第一个是需要输出的文件路径,第二个是变量名,比如 ```brush:vb Call file_var_export( "./ajax.txt" , POP_MVC ) ``` 再比如 ```brush:vb Call file_var_export( "./ajax.txt" , request.form ) Call file_var_export( "./ajax.txt" , request.QueryString ) ``` file_var_export的功能与var_export功能类似,只是输出的方式不同而已。 ### 配置APP_DEBUG 配置项APP_DEBUG有两个值0与1,0表示上线模式,1表示调试模式,调试模式与上线模式有很大的不同,调试模式与上线模式直观的不同是前者耗时更长,本质的不同是上线模式后会将控制器与Model的重写代码写入过程文件后直接从这些文件中读取,数据表的字段会写入文件,直接从文件中取字段而减少查询字段的数据库查询。