草庐IT

c++ - windbg 和 VS 找不到我的 pdb 文件

我有一个使用SCons和MSVS2013(express)编译器(从命令行编译)构建的项目。它编译并运行,但是,它会定期崩溃,所以我想调试它。我添加了以下标志:/Zi#Debugsymbols/DEBUG#Debugsymbols/FS#Concurrentdebugdatabasefileaccess构建后,我看到生成了一个名为vc120.pdb的pdb文件。我的可执行文件位于build文件夹中,pdb文件位于主项目目录中。但是,当我尝试附加我的可执行文件以通过VS2013或WinDbg进行调试时,我总是收到无法找到调试符号的错误。我在VS2013和WinDbg中都将“路径”添加到p

c++ - VS2012 提示 "already defined"类尽管 pragma once

我对我的项目有点不知所措。语言是C++,编辑器VisualStudio2012,一旦完成它应该是一个光线转换渲染器(光线转换位仍然缺失)。为此,我正在使用数学库Eigen。但是,当我尝试构建时出现链接错误。我过去没有太多使用C++语言,对这个错误所做的研究对我没有帮助。这是编译器的输出:1>------Buildstarted:Project:TX52-3DStereo-RT-CUDA,Configuration:Debugx64------1>Buildstarted06/12/201310:55:56.1>InitializeBuildStatus:1>Touching"x64\D

c++ - VS2010 在不同平台上生成的可执行文件应该不同吗?

我在VisualStudio2010v10.0.40219.1SP1Rel下有一个大型C++项目,我开始在我们的一个回归测试中看到一个错误。当我在dev机器上检查bug时,我无法让它发生,所以我将exes从测试机器复制到dev机器,bug出现了。然后我从测试机器上删除了包括项目在内的源代码树,从开发机器上复制它们,在测试机器上清理并重建它们,但错误仍然存​​在。所以基本上,在我的开发PC上使用相同的项目和配置构建的可执行文件,使用相同的编译器版本和安装的修补程序,与在测试PC上构建的不同。唯一的区别是开发PC运行的是Windows764,而测试PC运行的是XP。我还检查了所有链接的LI

c++ - 使用模板特化、默认参数和 VS2013 编译错误

templatevoidf(constT&v=T());templatevoidf(conststd::string&v){std::cout();//ErrorinVS2013,OKinVS2012,gcc-4.7f("Test");//OKf(std::string());//OKreturn0;}对于必须使用默认参数的情况,最新的VisualStudio2013编译器会给出以下编译器错误:errorC2440:'defaultargument':cannotconvertfrom'conststd::string*'to'conststd::string&'Reason:cann

c++ - 最小程序在 g++ 上产生 Valgrind 警告,但在 clang 或 VS 上不产生警告

我一直在疯狂地追踪一个中型项目中的内存错误。我将一个代码最小化为以下代码,并验证这会导致Valgrind在注释行号处发出无效读取警告。我正在为项目使用g++4.8.2(Debian4.8.2-16),使用-std=c++11-O0进行编译。g++4.7.0也会产生错误,4.4.6在稍作修改的版本(删除C++11)上也会产生错误。clang++不会导致错误,VS2013也不会。我的问题是:我是否在不知不觉中从事未定义的行为?这是Valgrind误报吗?如果是,我如何才能让自己放心,以后会遇到这样的情况?这段代码相当脆弱——特别是,让foo通过引用获取坐标可以消除这个问题,为Coord选择

c++ - VS2013 : How to disable warnings for included header files outside of the project

在我的项目中,我包含了一个由外部库提供的头文件。使用/W3,所有内容都可以在没有警告的情况下编译。但是,我希望我的项目能够使用/W4进行干净地编译。这对我的代码来说没有问题,但外部header会发出大量警告。我知道我可以做这样的事情:#pragmawarning(push)#pragmawarning(disable:####)//includehere#pragmawarning(pop)但是有一长串要禁用的警告。有没有一种方法可以在包含此header时将警告级别设置回/W3,同时仍使用/W4编译我的其余代码?谢谢! 最佳答案 #

c++ - VS2013 - 多次包含同一 header 时出错

在将项目从VisualStudio2005移植到2013时,我遇到了这种我无法找到解释的奇怪行为。上下文是关于通过多次包含某个头文件来创建模板特化,但在每次包含之前更改预处理器定义以基本上生成不同的类声明。我可以将问题缩小为以下情况:gen.hpp#ifdefENABLE_GEN#ifdefGEN_SWAP_ORDER//(1)classFoo{};#elseclassBar{};#endif#endifmain.cpp#defineENABLE_GEN#include"gen.hpp"#defineGEN_SWAP_ORDER#include"gen.hpp"intmain(){Fo

c++ - 以下代码在 VS 2013 Release/Debug 中产生不同的结果

这个问题在这里已经有了答案:Dodistinctfunctionshavedistinctaddresses?(4个答案)关闭7年前。这是VS2013编译器中的错误吗?以下代码在调试和发布时会产生不同的结果。在调试中结果符合预期,但在发布中它是“A”#includestructA{virtualvoid*getClass(){returnA::ID;};staticvoidID(){};};structB:publicA{virtualvoid*getClass(){returnB::ID;};staticvoidID(){};};structC:publicA{virtualvoid

c++ - 模板的 typedef 包括 char[][] - 适用于 VS2008 但不适用于 gcc

我有一些正在使用的库代码。它在VisualStudio(2008)下编译和工作,但不是GCC(v4.8.4.)在标题中我们有:externconstcharmenu_styles[MENU_COUNT][MAX_LEN];typedefSysEnumMenuStyleEnum;SysEnum在哪里(在另一个文件中定义):templateclassSysEnumgcc遇到错误:error:‘menu_styles’cannotappearinaconstant-expression我完全同意。(此外,它是constchar*转换为char*)。我希望VS2008只是用constchar*

C++ 类型比较 : typeid vs double dispatch dynamic_cast

是否有任何性能或稳健性原因使您更喜欢其中一个?#include#includestructB{virtualboolIsType(Bconst*b)const{returnIsType2nd(b)&&b->IsType2nd(this);}virtualboolIsType2nd(Bconst*b)const{returndynamic_cast(b)!=nullptr;}};structD0:B{virtualboolIsType(Bconst*b)const{returnIsType2nd(b)&&b->IsType2nd(this);}virtualboolIsType2nd(B