作为覆盖报告的一部分, 椰树 生成带有死亡代码的行列表。一个人经常想删除这些行,但是当它们分布在一个大型项目中时,它需要一些努力将编辑器导航到它们。这可以更容易地更容易获得较鲜明的特征 cmreport. 程序,是Coco的一部分。和 cmreport.,可以在文本编辑器或IDE中逐个编辑这些行。相同的想法可用于其他任务。

它背后的想法是基于许多编辑和IDE可以读取编译器的输出 - 尤其是错误消息和警告 - 并跳转到他们所指的代码中的位置。我们可以使用此功能并让 cmreport. 生成看起来像编译器错误消息的输出,并指向带有死亡代码的行。

要执行此操作,我们使用文本输出格式 cmreport.。主要是一个用途 cmreport. 要生成HTML报告,但还有一种面向线路的纯文本格式,非常适合生成模仿编译器错误消息。

以UNIX格式生成错误消息的脚本

错误消息的格式不同于UNIX的系统和Windows之间。我们将从UNIX格式开始。在UNIX中,编译器错误消息看起来像 /patt/to/file.cpp:55:12:一些错误消息,其中第一个数字是行号和第二个发生错误的列号。

以下shell脚本以相同的格式创建一个死锁位置列表:

#! /bin/bash
#
# Usage: deadcode.sh file.csmes

COCODIR=/opt/SquishCoco/bin
${COCODIR}/cmreport -m "$1" --text= --format-dead-code='%f:%l:%c: %m'

它要求COCO安装在标准位置, / opt / squishcoco。如果不是,则变量 椰树 必须改变。 (并且不要忘记使脚本可执行“chmod + x deadcode.sh“!)

该脚本有一个参数,这是一个参数 .csmes. 文件。 cmreport. 读取此文件,提取具有死路的行,并将它们写入标准输出。这样做,以下 选项 are used:

  • -M. 指定 .CSMES. 文件读取。在这里,它是脚本的第一个参数,该参数被括在引号中,以正确地处理带有空格的文件路径。
  • –text 指定输出格式是文本。之后没有给出输出文件“=”标志,这意味着输出 cmreport. 出现在标准输出流上。
  • –format-dead-code 指定带有死亡代码的行的输出格式。因此没有给出其他格式规范标志 cmreport. 只会报告死者行。格式字符串包含以下转义序列:
    • %F 代表文件的完整路径,
    • %L. 是线的线路数量,
    • %C 列号,最后
    • %E. 是线路的简短描述。在死者的情况下,它从单词开始“dead code: ”然后继续符合线的内容。

这些旗帜让人携带 cmreport. 生成与C / C ++编译器相同格式的输出。

与解析器示例一起使用

解析器示例在里面tutorial that comes with Coco contains a few lines of dead code. We can therefore use our script to find them.

首先,我们需要生成一个仪器的解析器版本,得到一个 .csmes. 文件,在我们的案件中 Parser.csmes.。运行解析器不是必需的,它足以编译它“./instrumented make -f gmake.mak distclean解析器“.

我们将使用Emacs编辑器来编辑源代码。 emacs有一个 编译 命令,通常用于运行编译命令 制作。我们需要跑我们的 deadcode.sh. 脚本,以显示的方式 在右边。它在这里显示的方式, deadcode.sh. 脚本必须位于与文件相同的目录中 Parser.csmes.,而且 编译 必须从与文件中同一目录中的文件运行命令。如果在您的情况下不起作用,请尝试使用脚本的完整路径和他 .csmes. file.

结果显示在右侧。在底部看到脚本的输出显示文件 parser.cpp. 包含五行的死代码。 Emacs已经自动打开了文件,并将光标放在第一行的开头与死者代码。

Windows的脚本

在Windows下,错误消息具有不同的格式。他们看着像是 C:\ path \ to \ file.cpp(55):一些错误消息,括号中的行号。这需要不同的命令行参数 cmreport.和we also should better write the script that generates the fictitious error messages as a Windows batch file.

结果如下所示; UNIX版本最重要的差异是由于百分号在批处理文件语法中扮演特殊角色;要获取正确的输出,我们需要使用格式字符串中的双倍百分号。我们还需要意识到COCO也可以安装在目录中 C:\ Program Files(x86)\ squishcoco;如果是这种情况,则需要更改变量Cocodir。
@echo关闭
REM用法:DeadCode.cmd file.csmes

放“cocodir = c:\ program files \ squishcoco”
“%COCODIR%\cmreport” -m %1 –text= –format-dead-code=”%%f(%%l): %%m”

与Visual Studio一起使用

喜欢Emacs的用户可以以与UNIX的方式相同的方式使用脚本,但那些喜欢Visual Studio的人是什么? 这里的一种可能性是使用“External Tools”Visual Studio的功能。

要创建生成死人行列表的外部工具,需要选择该条目“External tools…” in the “Tools”菜单。出现一个对话框窗口,其中一个新条目“Dead code”必须输入如右侧图像中所示。在里面“Commands” and “Arguments”字段,需要完整路径名;为了“Arguments”, the variable $(targetdir) 经常评估有用的路径前缀 .csmes. file.

在复选框中,最重要的是“Use Output window”,将脚本输出指向Visual Studio的编译器输出窗口:单击此窗口中的错误消息将编辑器指定为它们所引用的代码中的位置。

这种方法的唯一缺点是它有 .csmes. 内置的文件,项目更改时可能会很烦人。作为补救措施,复选框“Prompt for arguments”这里也选择:它允许输入不同的 .csmes. file, if necessary.

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

复制链接