草庐IT

虚拟调试

全部标签

c++ - 我可以在 C++ 中使用 [] 运算符来创建虚拟数组吗

我有一个庞大的代码库,最初是C语言,多年前移植到C++,它对大量空间数据的大型数组进行操作。这些数组包含表示点的结构和表示曲面模型的三角形实体。我需要重构代码,以便这些实体在内部存储的具体方式因特定场景而异。例如,如果点位于规则的平面网格上,我不需要存储X和Y坐标,因为它们可以即时计算,三角形也可以。同样,我想利用非核心工具,例如STXXL用于存储。最简单的方法是用put和get类型函数替换数组访问,例如point[i].x=XV;成为Pointp=GetPoint(i);p.x=XV;PutPoint(i,p);如您所想,这是对大型代码库进行的非常乏味的重构,在重构过程中容易出现各种

c++ - 我可以从调试二进制文件重建 C++ 源代码吗?

我有一个在调试中编译的C++应用程序(使用MinGW和Qt),但我丢失了一些主要更改,因为我的团队中有人忘记在源代码控制管理器中提交他的更改,并用其他更改覆盖了源代码。当我在调试中运行程序时(在QtCreator中),我可以在main中设置一个断点,然后查看源代码。有没有一种方法可以仅使用调试二进制文件来重建所有丢失的源文件?手动或自动。谢谢! 最佳答案 WhenIruntheprogramindebug(inQtCreator)Icansetabreakpointinmainandthenseethesourcecode.真的吗?

c++ - 如何调试段错误

如何调试段错误?基本上是这样的:我在后台运行我的服务器:./server&然后我运行我的客户端:./client当我尝试登录我的服务器时,使用正确的用户名和密码,一切正常,但当我输入无效的用户名和密码时,会导致段错误。如何让编译器/调试器能够输出它实际看到的导致分段核心转储的错误。我知道gdb,但我尝试使用gdb客户端,但它似乎不起作用。 最佳答案 处理段错误的一个好主意是使用valgrind运行程序。用于调试。这样,您通常会获得有关导致段错误的原因的更多详细信息。例如,如果您正在读取未初始化的内存,它会告诉您。

HarmonyOS开发 使用云数据库(HarmonyOS ArkTS API9以上)【真机调试】遇到的so重名问题解决

问题报错如下:/usr/local/bin/node/Users/admin/.hvigor/project_caches/08e11114fe5d1e4ddd3877fbb7765185/workspace/node_modules/@ohos/hvigor/bin/hvigor.js--modemodule-pmodule=entry@default-pproduct=defaultassembleHap>hvigorUP-TO-DATE:entry:default@PreBuild... >hvigorUP-TO-DATE:entry:default@GenerateMetadata..

c++ - 用调试版本覆盖 new 而不会损坏 placement new

Microsoft运行时库提供了分配函数的调试版本。对于C++,这是带有签名的operatornew的调试变体:void*operatornew(size_tsize,intblockType,constchar*filename,intlinenumber);宏定义如下#defineDEBUG_NEWnew(_NORMAL_BLOCK,__FILE__,__LINE__)现在要检测所有分配,一个通常定义#ifdefinedDEBUG_NEW#definenewDEBUG_NEW#endif但是这个定义破坏了任何使用placementnew的地方,因为两组参数最终都是语法错误。现在我可

c++ - 代码块调试预处理器

我正在使用Codeblocks编写C++程序,出于调试目的,我需要知道Codeblocks的Building-Target是设置为“DEBUG”还是“RELEASE”。我已经试过了:#ifdefDEBUGprintf("Debug-Message");#endif还有这个#ifdef_DEBUGprintf("Debug-Message");#endif但是这些词都没有定义。我是否必须自己定义DEBUG并在每次更改Building-Target时更改它,还是有一个我不知道的词? 最佳答案 DoIhavetodefineDEBUGon

c++ - 基础和派生虚拟析构函数的影响

我对多个虚拟析构函数有了一些重新考虑,尤其是。读后阅读http://blogs.msdn.com/b/oldnewthing/archive/2004/05/07/127826.aspx.假设我有classBase{public:Base();virtual~Base();private:Logger*_logger;};//andclassDerived:publicBase{public:Derived();virtual~Derived();private:Logger*_logger;};在cpp文件中,在每个析构函数中我删除了相应的_logger指针Base::~Base()

c++ - 虚拟多重继承

我偶然发现了这个代码示例:#includeusingnamespacestd;classA{intx;public:A(){x=1;coutThiscodeprintsABABCD我不知道为什么。我认为它会打印AforD:publicA,然后ABforD:publicB,然后ABCforD:publicC,然后是D,但似乎A只打印了两次。这是如何工作的? 最佳答案 基的构建顺序是(忽略虚拟基)从左到右,因为它们是在继承关系中键入的。添加虚拟基础后,它们将以从左到右的深度优先方式首先(在任何非虚拟基础之前)初始化。现在应该可以解释输出

c++ - 用于调试日志语句的预处理器宏是否在 C++ 中占有一席之地?

最近我一直在阅读ScottMeyers的EffectiveC++SecondEdition,以改进C++最佳实践。他列出的项目之一鼓励C++程序员避免预处理器宏并“更喜欢编译器”。他甚至说除了#include和#ifdef/#ifndef之外,C++中几乎没有使用宏的理由。我同意他的推理,因为你可以完成下面的宏#definemin(a,b)((a)具有以下C++语言特性templateinlineconstT&min(constT&a,constT&b){returna其中inline为编译器提供了删除函数调用和插入内联代码和模板的选项,这些代码和模板可以处理具有重载或内置>运算符的多

c++ - 调试嵌入式 Lua 5.2.2 代码

如何调试嵌入在我的C++应用程序中的Lua5.2.2代码?我已经看过这个question并且其中提供的所有IDE都处理5.1及更低版本,当我尝试将它们与5.2.2一起使用时,它们会崩溃。 最佳答案 您应该能够使用ZeroBraneStudio调试您的应用程序通过关注instructionsforLua5.2debugging.请注意,您需要针对Lua5.2编译luasocket。(您看到的崩溃可能是因为您的应用程序加载了针对Lua5.1编译的luasocket,而后者又加载了Lua5.1DLL或无法找到所需的符号。)如果您不想编译l