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的重写代码写入过程文件后直接从这些文件中读取,数据表的字段会写入文件,直接从文件中取字段而减少查询字段的数据库查询。