Production组件及远程代码调试
本片文章主要介绍两种Production debug的方式,
- 使用管理门户测试Production 组件
- 使用VS Code来对远程production代码进行debug
使用管理门户测试Production 组件
可以使用管理门户来对Production进行调试
- 测试组件
开启production测试: Interoperability -> 配置 -> Producton
在Production设置中,将开发与调试中的'测试开启'选中,如下图所示。
测试: Interoperability -> 测试 -> 业务主机
首先选择目标类型,业务流程或者业务操作,然后再目标名称这个下拉菜单中选择你要调试的组件名称,点击‘测试’
在请求详情中,填写测试请求的请求内容,然后点击'调用测试服务',测试结果如下。
然后,可以点击‘可视化追踪’来查看详情。
- 跟踪(Trace)
跟踪元素使你能够看到production中各种元素的行为,以便进行调试或诊断。
将跟踪元素添加到production的适当区域,在production运行时相应的跟踪信息就被写入,但是跟踪消息只是字符串,与Ens.Message及其子类无关。
跟踪消息可以启动和关闭,配置production以启用跟踪,意味着在运行时,跟踪元素被执行。而关闭跟踪意味着跟踪元素在production运行时会被被忽略。
可以选择将适用的业务主机配置为在前台运行,这样你就可以在生产运行时在终端看到跟踪信息。对于如何开启前台调试请参考Production前台调试。
启动跟踪
Interoperability -> 配置 -> Producton,选中要设置跟踪的组件。选中‘跟踪事件记入日志’,这一步会将追踪信息写到事件日志中。
默认情况下,所有的用户跟踪元素都被启用。你也可以通过设置^Ens.Debug来启用各种系统事件的跟踪,如果只是调试自己的代码用户跟踪就已经足够了,不需要开启其他系统事件的跟踪。
设置跟踪
业务服务 - BS ,业务操作 - BO :
在代码中添加用户跟踪
$$$TRACE("received application for "_request.CustomerName)
在代码中添加系统跟踪
$$$sysTRACE(trace_message)
在代码中添加error log
$$$LOGERROR("Awaiting connect on port "_..Port_" with timeout "_..CallInterval)
在代码中添加info log
$$$LOGINFO("Got data chunk, size="_$length(data)_"/"_tChunkSize)
业务流程 - BP :
在BPL中,点击 ‘-添加活动-' 下拉菜单,选择’跟踪‘
查看跟踪
从消息查看器中查看:
Interoperability -> 查看 -> 消息
选择你要查看的消息,点击相应的'会话'超链接,
点击 ◇,即可查看相应的trace
从事件日志中查看: Interoperability -> 查看 -> 事件日志 , 如下图所示,可以看到你所设置的所有事件日志。
使用VS Code来对远程production 代码进行debug
InterSystems支持使用VS Code连接到InterSystems IRIS服务器使用ObjectScript开发代码。如果您没有使用过VS Code连接到InterSystems IRIS服务器,请先阅读本社区文章 使用VSCode 进行IRIS 开发。
- VS Code 连接远程 IRIS 请参考文章 使用VSCode 进行IRIS 开发,将VS Code连接到IRIS实例。
- VS Code对本地productioin代码进行debug 如果想使用VS Code对本地代码进行debug,也请参考文章使用VSCode 进行IRIS 开发中的 ''在VSCode中调试' 部分。
- VS Code对远程代码进行debug 在IRIS实例上面操作: 创建web 应用程序,在需要远程连接的IRIS实例上面建立一个名为/_vscode的web应用程序,配置如下:
在VS Code上面操作:
将VS Code连接到远程IRIS之后, 创建相应的工作区
InterSystems Tools - > 选择你要debug的命名空间 -> 点击右边笔状图标’Edit Code in Namespace‘。
进入到刚刚创建的工作区
创建workspace.json 文件 , 查看 -> command palette -> Open Workspac setting, 生成如下JSON文件, 文件名为workspace.json
{
"folders": [
{
"name": "localhcc:HCC",
"uri": "isfs://localhcc:hcc/"
}
],
"settings": {
"objectscript.showExplorer": false
}
}
创建launch.json 文件 , 点击左边菜单栏中的 'run and debug'图标,左上角会出现在launch.json文件中配置的调试名称。
配置launch.json文件
- Debug普通类方法,使用如下launch.json文件,具体debug方式,请参考文章使用VSCode 进行IRIS 开发中的 ''在VSCode中调试' 部分。下图的launch.json文件表示可以调试 Test.SQL类中的SavePatientFromMsg函数,其中2为参数。
{
"version": "0.2.0",
"configurations": [
{
"type": "objectscript",
"request": "launch",
"name": "ObjectScript Debug SQL",
"program": "##class(Test.SQL).SavePatientFromMsg(2)"
}
]
}
- Debug production, 使用如下launch.json文件, 其中processId为Production组件中的作业号
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "objectscript",
"request": "attach",
"name": "RetrieveCDAOperation",
"processId": 4436
}
]
}
Production中的作业号查询方式,如下图所示,在IRIS管理门户中,进入production页面。选中你想调试的组件,在右边即可以查看作业号。
调试
测试前,先增加断点,本文使用业务操作BO为例,我需要测试我的业务操作 HCC.SVR.Prod.BO.SaveCDAOperation。在我的业务操作类HCC.SVR.Prod.BO.SaveCDAOperation中增加几个断点。
选择你想调试的名称。点击左边绿色三角形的小图标’start debugging‘。
点击左边菜单栏中的 'run and debug'图标,左上角会出现在launch.json文件中配置的调试名称。选择你想调试的名称。点击左边绿色三角形的小图标’start debugging‘。
点击’start debugging‘后,最上方会出现测试功能条,但是功能条处于灰色,不可用状态。
然后触发production,可以使用postman 或者 soapUI等测试工具来触发要测试的production组件。如下图所示,相应的变量显示在左边菜单栏旁边,最上方的测试功能条处于可用状态,可以点击’step in‘ 、 ’step over‘、’step out‘ 来进行相应的调试,同时,INT - 中间源文件 Queue.1.int也会显示在调试页面上。INT 为中间源文件,是可执行的InterSystems IRIS对象代码。
如果想略过其他函数或者中间源文件,直接跳到你想调试的类或者函数中,可以将鼠标直接点击在想调试的函数中,然后右击鼠标,点击'Run to Cursor'。
点击'Run to Cursor'后,debug就会运行到鼠标指针闪烁的函数中,之后可以使用’step in‘ 、 ’step over‘、’step out‘ 来进行相应的调试。关于如何监控及查看调试过程中的变量,请参考文章使用VSCode 进行IRIS 开发中的 ''在VSCode中调试' 部分