教emacs识别Boost.Test错误

时间:2009-06-18 07:59:37

标签: unit-testing emacs boost

当测试用例失败时,这是Boost.Test的输出:

bjam toolset=msvc
...patience...
...found 1287 targets...
...updating 4 targets...
compile-c-c++ ..\bin\test\Function.test\msvc-8.0\debug\link-static\threading-multi\Function.obj
Function.cpp
msvc.link ..\bin\test\Function.test\msvc-8.0\debug\link-static\threading-multi\Function.exe
msvc.manifest ..\bin\test\Function.test\msvc-8.0\debug\link-static\threading-multi\Function.exe
testing.capture-output ..\bin\test\Function.test\msvc-8.0\debug\link-static\threading-multi\Function.run
====== BEGIN OUTPUT ======
Running 1 test case...
Function.cpp(26): fatal error in "FunctionConstruction": critical check pf->Name() == "F13" failed [F1 != F13]

*** 1 failure detected in test suite "foo_test"
Detected memory leaks!
Dumping objects ->
{235} normal block at 0x003A7C88, 32 bytes long.
 Data:  00 00 00 00 CD CD CD CD 54 31 00 CD CD CD CD CD 
{234} normal block at 0x003A7E00, 96 bytes long.
 Data:  00 00 00 00 CD CD CD CD 54 31 00 CD CD CD CD CD 
{233} normal block at 0x003A7D88, 76 bytes long.
 Data:  F4 D9 45 00 00 00 00 00 CD CD CD CD 00 7E 3A 00 
Object dump complete.

EXIT STATUS: 201 
====== END OUTPUT ======

MSVC正确解析此错误,因此我可以双击并跳转到代码中。但emacs无法解析此输出。如何教它?

1 个答案:

答案 0 :(得分:3)

解决方案将涉及自定义变量:'compilation-error-regexp-alist'compilation-error-regexp-alist-alist'compilation-directory-matcher

第一个,'compilation-error-regexp-alist只是一个符号列表,告诉编译模式在第二个变量`'compilation-error-regexp-alist-alist'中查找什么,所以你可能只是添加一些东西为了提升:

(add-to-list 'compilation-error-regexp-alist 'boost)

然后,为了完成这项工作,您需要向第二个变量'compilation-error-regexp-alist-alist添加一个列表。这是它开始变得棘手的地方。您需要阅读第一个变量的文档才能使正则表达式正确,但它将类似于:

(add-to-list 'compilation-error-regexp-alist-alist
         '(boost
           "^\\(.*\\)(\\([0-9]+\\)): fatal error in" 1 2))

regexp与错误行匹配,1和2分别指定指定文件名和行号的子表达式。您还可以指定其他内容(请参阅文档)。

但是,老实说,上面两个设置可能是不必要的,因为我很确定现有的正则表达式之一会匹配格式。目录跟踪确实存在问题。

最后一个变量`'compilation-directory-matcher'是让下一个错误跟踪在哪里找到文件的变量。所以需要适当更新。它看起来不像升级测试吐出Emacs寻找的有些标准的“输入目录...”,但信息似乎在编译行中......

您也可以尝试询问提升用户邮件列表,看看是否有人解决了这个问题。邮件列表可以找到here