VS的工程链接优化的问题

打算在项目中试试 CATCH 这个测试框架。请同事在工程中进行了试验,结果却出现了一点问题。

CATCH 和 GTest 之类的框架一样,可以直接在 C++ 文件中定义测试函数,就能自动地注册到测试列表中,而不需要显式地“注册”测试函数这样的代码。其实原理很简单,就是定义一个宏(TEST_CASE),这个宏展开以后,会定义一个全局对象,测试函数作为构造函数的参数传入,然后构造函数中做相应的“注册”动作。由于全局变量的构造函数会在Main函数执行之前就执行,所以就可以在 Main 被执行前,把所有的测试函数注册到测试列表中。

CATCH 这个框架用起来非常简单,只需要包含一个 catch.hpp 头文件就可以了。这也是我看中这个框架的原因。虽然说应该是很简单的,但我还是先新建了一个工程进行了测试,在这个工程中,有三个文件,其中一个包含 main 函数,另外两个就是单纯地定义测试函数。一切都非常顺利,两个 test case 都被执行了,而且结果也正确。

  1. #include "catch.hpp"
  2. extern unsigned int Factorial(unsigned int number);
  3. TEST_CASE("Factorials are computed 2", "[factorial]") {
  4. ????REQUIRE(Factorial(1) == 1);
  5. ????REQUIRE(Factorial(2) == 2);
  6. ????REQUIRE(Factorial(3) == 6);
  7. ????REQUIRE(Factorial(10) == 3628800);
  8. }

我的想法是“main函数”定义在一个文件中,其它文件只要愉快地写 TestCase 就可以了,这样分工起来也容易,合并的工作量也极小。

不过当同事在我们正式的开发工程中做同样类似的事的时候,却出问题。他定义在单独文件中的的 Test case 函数总是不能执行。这下我傻眼了。

我把他的工程拷到我的机器上运行,结果也是一样的。有点头疼。后来我注意到一点,当我把断点打在新加的 TEST_CASE 函数中,运行起来以后,这个断点会显示“此断点无法命中”这样的信息。我只好猜测,虽然我每次修改这个文件VS都会重新编译工程,并且也能看到生成的对应的 obj 文件,但这个文件很有可能没有被链接到工程中。因为我们的正式的开发工程比较大,文件很多,可能是因为 VS 在编译大的工程时,自作聪明做了优化,把认为“从来没有用到过的文件”不进行链接。为什么 VS 会认为新增加的 TestCase 文件没有被使用过呢?因为 CATCH 框架(我觉得GTest等也是一样的)的注册方式是隐性的,它定义的全局变量的构造函数中把自己另一个函数关联到整个的 TestCase 表中,然后再在 Main 函数中通过这张 TestCase 函数表来调用所有的测试函数。VS 很可能在这里分析错误,误以为这些函数不会被用到。如果我在这个文件中随便定义一个函数,然后再在其它会执行的函数中调用这个函数,那么 VS 就不会做这个优化了。于是我这么试了一下,TEST_CASE 文件就被执行了。

(优化不是这么容易做的啊~谁把它报给 VS 吧~)

时间: 2024-10-25 09:29:52

VS的工程链接优化的问题的相关文章

dede内链怎么优化,Dedecms内部链接优化技巧

dede内链怎么优化,dedecms内部链接优化技巧 使用dedecms的过程中发现,可以通过dedecms的文档关键词维护功能.发表文章时候的关键词添加功能(也可以自动获取)以及核心设置里面的是否使用关键词关联文档功能来实现完美的内部链接优化.具体步骤如下: 1.系统管理-核心设置-使用关键词关连文章-是; 2.内容维护-文档关键词维护(左侧菜单中) 此时有两个方法: 2.1 点击分析系统内的关键词,这样会得到许多的关键词,但是太冗余,比如"一个""如果"等. 2

SEO博客优化关于友情链接优化窍门

注册域名的时分挑选跟自个做的博客有关,不论你是做自个仍是做区域SEO,首先得有关,为何首先说这个,也是我自个博客最大的缺陷,当初做博客的时分,彻底没有考虑到域名有关性,仅仅单纯的注册了自个的名字加上自个的出世月日.我所说的并不是单纯的用户体会,所谓的用户体会即是站在用户视点去看待自个的网站,前面说过,博客不要为了排行而去硬写用户看不懂的文章,不论你是不是做SEO博客,或许其他博客,最佳有可读性,因为一旦有用户进入你博客,我信赖他是有意向才进的,这个时分假如你写的文章跟你标题或许描绘不太有关,用户

CMake配置工程链接库

CMake是一款优秀的C/C++项目构建工具.而C/C++项目经常使用一些第三方库,如boost.luajit等.而在CMake下大致有3种方式将C/C++库引入工程. find_packagefind_package是CMake原生使用的库查找命令.使用方式如下 find_package(Boost REQUIRED)find_package(SDL2 REQUIRED)if(Boost_FOUND) #这些变量的名称没有标准,去CMakeCache.txt里看产生什么变量. message(

WordPress SEO ? WordPress网站终极优化指南

原文地址:http://www.eastdesign.net/wordpress-seo/ 最新消息,东方设计学院 WordPress SEO 系列视频教程正在持续更新中,目前为了不至于让视频传播过于泛滥,设置了登陆权限,有兴趣查看的用户可以简单填写一个索取测试账号的表单,提交一份表单给我们,我们将尽快回复测试账号登陆密码,视频教程地址:http://www.eastdesign.net/wordpress-seo-tutorial/ WordPress网站终极优化指南 WordPress 是一

NYOJ 1239 引水工程 【MST 变形】

引水工程 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程,事关中华民族长远发展."南水北调工程",旨在缓解中国华北和西北地区水资源短缺的国家战略性工程.就是把中国长江流域丰盈的水资源抽调一部分送到华北和西北地区.我国南涝北旱,南水北调工程通过跨流域的水资源合理配置,促进南北方经济.社会与人口.资源.环境的协调发展. 整个工程分东线.中线.西线三条

unity3d 项目源码下载链接

2-1 炉石传说 客户端加服务器端 链接:http://pan.baidu.com/s/1dDKY3Fr 密码:c03q 2-2 新仙剑奇侠传 链接:http://pan.baidu.com/s/1b4QVqI 密码:dic5 2-3 unity3d 战斗卡牌<变身吧主公>客户端+服务器源码 链接:http://pan.baidu.com/s/1kUpot51 密码:i02u 2-4 降临OL-U3D全套源码 链接:http://pan.baidu.com/s/1sktLQ5v 密码:we0g

如何对网站的文件和资源进行优化

1.文件合并(目的是减少http请求) 2.文件压缩(目的是直接减少文件下载的体积) 3.使用cdn托管资源 4.使用缓存 5.gizp压缩你的js和css文件 6.meta标签优化(title,description,keywords).heading标签的优化.alt优化 7.反向链接,网站外链接优化

zzuoj10409--引水工程 (***最小生成树***)

10409: D.引水工程 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 18  Solved: 10[Submit][Status][Web Board] Description 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程,事关中华民族长远发展.“南水北调工程”,旨在缓解中国华北和西北地区水资源短缺的国家战略性工程.就是把中国长江流域丰盈的水资源抽调一部分送到华北和西北地区.我国

浅析静态库链接原理

静态库的链接基本上同链接目标文件.obj/.o相同,但也有些不同的地方.本文简要描述linux下静态库在链接过程中的一些细节. 静态库文件格式 静态库远远不同于动态库,不涉及到符号重定位之类的问题.静态库本质上只是将一堆目标文件进行打包而已.静态库没有标准,不同的linux下都会有些细微的差别.大致的格式wiki上描述的较清楚: Global header ----------------- +------------------------------- File header 1 --->