Debugging 调试生成文件

Debugging 调试生成文件,debugging,makefile,Debugging,Makefile,让我用我对makefile或make知之甚少的注释来补充这个问题 有一个非常大的项目是每晚自动构建的。它以调试和发布模式构建,调试用于Valgrind等实用程序,以提供代码分析。不知何故,一些构建的库在生成过程中丢失了调试标志,这使得一些分析输出毫无帮助。我的任务是找到bug,我需要一些关于如何定位/修复问题的建议 提前感谢鉴于信息稀少,我只能根据我在少数大型项目中看到的Makefile使用情况,勾勒出一个非常通用的策略 如果您还不知道标志的来源,请搜索Makefiles以找到 比如: find

让我用我对makefile或make知之甚少的注释来补充这个问题

有一个非常大的项目是每晚自动构建的。它以调试和发布模式构建,调试用于Valgrind等实用程序,以提供代码分析。不知何故,一些构建的库在生成过程中丢失了调试标志,这使得一些分析输出毫无帮助。我的任务是找到bug,我需要一些关于如何定位/修复问题的建议


提前感谢

鉴于信息稀少,我只能根据我在少数大型项目中看到的Makefile使用情况,勾勒出一个非常通用的策略

如果您还不知道标志的来源,请搜索Makefiles以找到

比如:

find . -name Makefile -exec grep -nH -- -g {} \;
(如果项目使用包含的makefile,如foo.mk或bar.mak或其他文件,则调整-name模式。如果调试标志是其他文件,则调整“-g”)

您可能会发现它被分配给一个变量,比如CFLAGS。环顾分配此变量的位置,它可能是有条件设置的(例如,
ifeq($(RELEASE),1)

现在看看库中没有得到这些标志的Makefile。找到compile命令所在的位置。它是否使用了正确的变量?这些Makefiles是否覆盖变量


将生成的输出捕获到文件并搜索可能未设置调试标志的任何其他位置也可能会有所帮助。

make本身也支持调试标志,-d;根据Makefiles彼此调用的方式,可以将其传递(如果没有,可以用脚本重写);然后,如果您将结果输出馈送到一个文件,您就可以开始寻找线索了。

使用remake,它真的很好

您能发布代码吗?或者至少是第1行到第25行?标志/选项通常在开始时设置。有超过100个Makefiles,它们由顶级Makefile(内容很少)和彼此生成。我不能完整地发布它们(封闭源代码),如果我知道发布哪个部分是有用的,我可能已经有了答案。根据我的经验,
make-d
太吵了,没有任何用处。我假设你会使用grep或类似工具来增加信号/噪声。