问题标签 [dead-code]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
14545 浏览

c++ - 识别 C/C++ 中未使用的函数

可能重复:
在大型 C++ 遗留应用程序中查找“死代码”

我的项目有很多 C 源文件,每个文件都有很多全局函数。其中许多根本不再被任何调用者引用。有没有一种简单的方法来识别这些函数中的哪些函数根本没有被任何人引用?

VC生成的地图文件似乎很有用。但我不确定函数名称是如何/何时在地图文件中列出的。

0 投票
3 回答
770 浏览

java - 不应该出现的死代码警告

我有一个非常简单的 Java 代码,就像这样(这只是一个摘录):

在 Eclipse 中,带有注释的片段被标记为死代码。为什么?条件中没有final元素。除了循环的最开始,该object变量不会在任何地方分配给常量 null,在此之后它通常应该被覆盖,但它并不总是发生。object可以很好地为空和非空。

我错过了什么吗?

答案

好吧,我找到了答案,为了展示它,我必须在我的示例中添加一行代码,我在尝试简化代码摘录时无意中省略了这行代码,但这很重要。该行是:

所以对象必须是非空的,否则代码无法通过异常访问。此行是出于调试目的临时添加的,这就是我不考虑它的原因。

0 投票
1 回答
95 浏览

c++ - 有选择地编译框架 C++ 的方法?

我想仅在使用元素时选择性地编译(非常臃肿和大)框架的一部分。

我对如何做到这一点有一些想法,但未能正确实施;

  1. 使用与类或方法同名的定义宏来切换变量,该变量会导致框架的该部分被预处理器包含。我有一个实现这个的想法,但被卡住了。

  2. 找到一种方法将我的所有函数定义为模板,以便编译器在需要它们之前不会生成它们。但是我不确定如何在多文件项目中完成这项工作。

有没有不使用第三方编译器或插件/工具的好方法?

0 投票
1 回答
343 浏览

gcc - 使用特定功能删除 Gcc 死代码

假设我有一个大型库 liblarge,以及链接到 liblarge 的应用程序。

Liblarge 在 LGPL 许可下,而应用程序在专有许可下。我希望能够从 liblarge 中删除app 中未使用的所有“死代码” 。我能以某种方式做到这一点吗?也许向链接器提供一个使用函数的列表?

0 投票
2 回答
576 浏览

gcc - GCC LTO 是否执行跨文件死代码消除?

说我有一个功能

我可以毫无问题地编译和运行它;如果我想要我可以通过的功能-D FEATURE_X并且它可以工作。

但是,如果我想do_something放入另一个文件怎么办(并且每次我决定更改选项时都不必重新编译该文件)。如果它在同一个文件中,我假设

将正确使用死代码消除,消除调用。如果我把它放在另一个文件中,没有 LTO,

它不会删除代码(它无法知道)。那么,启用链接时优化后,编译器是否可以检测FEATURE_X链接时的值,确定代码是否被使用,并在适当时将其删除?

0 投票
1 回答
200 浏览

ios - 如何制作不能被 dead_stripped 的目标文件?

生成没有设置SUBSECTIONS_VIA_SYMBOLS标志的 Mach-O 目标文件的最简单方法是什么,以便链接器(带有-dead_strip)稍后不会尝试将文本部分切割成片段并猜测使用了哪些片段?

我可以使用 llvm/gcc (4.2.1) 的命令行选项来阻止它.subsections_via_symbols首先发出,或者使用命令行工具从现有的目标文件中删除标志。

(根据 Mach-O 规范自己编写这样的工具是一种选择,但如果可能的话,我宁愿不要那么辛苦地重新发明轮子)。

平台: iOS,从 OSX 与 XCode 4.5 交叉编译。


背景:我们正在提供其他公司构建到应用程序中的静态库。当我们的库遇到问题时,它会生成一个崩溃报告,其中包含堆栈跟踪和某些其他关键信息(如果我们幸运的话)我们可以稍后进行分析。通常,部署的应用程序已被剥离调试信息,因此解释堆栈跟踪是一个问题。如果我们自己制作应用程序,我们只需保存剥离之前的 DWARF 调试数据,并使用它来解码传入崩溃报告中的地址。但是我们不能依赖应用程序制造商从他们的链接步骤中向我们提供此类数据。

我们正在做的是让崩溃报告包含所选函数的运行时地址;从中我们可以推断出链接器映射中的地址与崩溃报告中的地址之间的偏移量。我们将整个库逐步链接到单个 .o 中,然后再将其填充到 .a 中;因为它只做一件大事,所以当最终链接应用程序时,从其中删除未使用的功能不会节省太多。不幸的是,库中的一些代码有时没有使用(主要功能的替代 API 入口点,用于解释我们的错误代码的小帮助函数等),如果应用程序开发人员链接到-dead_strip,它扰乱了崩溃报告的地址重建,即最终应用程序中的相对偏移量与我们增量链接操作的链接器映射不同。

我们不能现实地要求所有应用程序开发人员在他们的构建过程中禁用死代码剥离,所以如果我们可以将我们的 .o 标记为“不可死剥离”并让最终的应用程序链接尊重这一点,这似乎是一个更好的前进方式。

0 投票
2 回答
9806 浏览

java - for 循环中 i++ 部分中的死代码警告

这段代码在for循环中不断给我一个死代码警告,并且由于某种原因i++它没有增加!i

0 投票
2 回答
1362 浏览

delphi - 如何从 EXE 文件中删除死代码?

可能重复:
减少 exe 文件

给定一个 EXE 文件,有哪些工具可以删除所有未使用的代码并使用应用程序真正使用的代码创建一个新的 EXE 文件?我认为应该存在这样的东西。只是为了好奇;但我认为它可以作为生成较小 EXE 文件而无需未使用代码的工具非常好。

PS:Delphi 生成独立的 EXE 文件,其中包含应用程序中使用的所有对象的代码,但并非该对象的所有元素都被真正使用。这会产生大文件。我记得 Pascal 的第一个版本只包含真正使用的代码,并且没有插入未使用的代码,而且 EXE 文件更小。

0 投票
2 回答
697 浏览

c++ - 用于复杂 C++ 项目的动态死代码消除工具

我们有一个包含大量代码的项目,其中一部分是遗留代码。作为工作流程的一部分,每隔一段时间,都会检查产品的所有功能。我想知道是否有办法使用这个事实来动态检查代码的哪些部分从未使用过?(困难的部分是 C++ 代码,.Net 和 Java 更受控制,遗留更少)。

另外 - 是否有可以处理大量代码和复杂项目(即~1M 行)的动态死代码消除工具?

我发现的所有类似问题都涉及我们都准备好的静态分析。

谢谢!

0 投票
5 回答
2016 浏览

java - 为什么 Eclipse 抱怨死代码?

Eclipse 一直说最后一个 elseif 和 else 是死代码,但我不明白。

我是这样推理的:

  1. 如果 bote img0 和 img1 不为空,则 if 评估为真
  2. 如果它评估为假,那么
    • img0 为空或
    • img1 为空或
    • img0 和 img1 都为空。
  3. 如果 img0 不为 null,则第一个 elseif 评估为 true,如果评估为 false,则 img1 可能不为 null,或者 img0 和 img1 都可能为 null

我错过了什么,“死亡”在哪里?

提前致谢。