使用类型类时,Coq有时会发散。当在Proof General下发生这种情况时,Emacs也会挂起。
我知道恢复的最好方法是中断emacs(C-g)并重启Coq(C-c C-x)。但是,这不仅仅是杀死Coq进程,而是让我处于一种模式,其中Emacs再次被挂起,显示“缩回缓冲区...”很长一段时间(有时这么长,我放弃了,只是开始一个全新的emacs !)。
为什么呢?
有更好的方法吗? (并且:当发生这种情况时,是否有一个简单的第一步来查看首先发生的分歧?)
答案 0 :(得分:2)
如果emacs挂起除垃圾收集以外的任何内容,通常可以使用{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "[concat(parameters('keyVaultSettings').name, '/add')]", <!-- notice the "/add" -->
"apiVersion": "2015-06-01",
"properties": {
"mode": "Incremental",
"accessPolicies": [
{
"tenantId": "[reference(concat(resourceId('Microsoft.Web/sites', parameters('webAppName')),'/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').tenantId]",
"objectId": "[reference(concat(resourceId('Microsoft.Web/sites', parameters('webAppName')),'/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]",
"permissions": {
"secrets": [
"get",
"list"
]
}
}
]
}
}
中断它。如果C-g
/ C-c C-x
不起作用,您可以使用C-c C-c
从进程管理器/命令行中删除coqtop进程。
这是因为coqtop有一些循环,它不检查中断,或者不经常检查,因此它不能及时捕获来自PG的中断。
此外,正如其他答案所述,pkill coqtop
会在Set Typeclasses Debug
和*response*
缓冲区中为您提供非常详细的类型类分辨率记录。
答案 1 :(得分:1)
我不知道这实际上是否有效,但有时我发现如果我按C-c C-c
几次,Proof General会中断Coq。
关于第二个问题,您可以在调用有问题的行之前将Set Typeclasses Debug.
添加到脚本中。然后Coq将在Emacs的*response*
缓冲区中打印其实例搜索的跟踪。如果您的脚本正在循环,请确保在触发循环后立即点击C-c C-c
,因为跟踪可以非常快地跟踪
答案 2 :(得分:0)
最后一点,我提醒自己
设置Typeclasses Debug。
答案 3 :(得分:0)
奇怪:我真的不确定emacs是否卡在最后或是否是显示错误:似乎如果我切换到另一个屏幕然后切换回来我发现 coq已退出我期待的消息,马上。