文章
Jingwei Wang · 七月 8 阅读大约需 6 分钟

Production组件及远程代码调试

本片文章主要介绍两种Production debug的方式,

  • 使用管理门户测试Production 组件
  • 使用VS Code来对远程production代码进行debug

使用管理门户测试Production 组件

可以使用管理门户来对Production进行调试

  1. 测试组件

开启production测试: Interoperability -> 配置 -> Producton

在Production设置中,将开发与调试中的'测试开启'选中,如下图所示。

测试: Interoperability -> 测试 -> 业务主机

首先选择目标类型,业务流程或者业务操作,然后再目标名称这个下拉菜单中选择你要调试的组件名称,点击‘测试’

在请求详情中,填写测试请求的请求内容,然后点击'调用测试服务',测试结果如下。

然后,可以点击‘可视化追踪’来查看详情。

  1. 跟踪(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 开发

  1. VS Code 连接远程 IRIS 请参考文章 使用VSCode 进行IRIS 开发,将VS Code连接到IRIS实例。
  2. VS Code对本地productioin代码进行debug 如果想使用VS Code对本地代码进行debug,也请参考文章使用VSCode 进行IRIS 开发中的 ''在VSCode中调试' 部分。
  3. 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中调试' 部分

0
0 33
讨论 (0)1
登录或注册以继续