草庐IT

虚拟调试

全部标签

c++ - Visual Studio 2010 调试 "if (var == NULL)"未触发

已解决-构造函数问题MatthewFlaschen和MichaelBurr指出Node(int)的重载构造函数调用Node()不起作用的问题because...谢谢大家!我已经构建了一个程序(我正在调试它)并且遇到了一个奇怪的问题......一个`if`语句没有在它应该被触发的时候被触发......这是一个学校项目,我们必须构建一个具有至少一个“优化”功能的AVL树。我确信并测试过`rdown`和`ldown`起作用(作为平衡因素)——树不是完全平衡的。相反,它基于分支的高度(即-`balance()`应该只返回(1,0,-1)否则它是不平衡的。我希望这些信息足以解决这个奇怪的问题..

c++ - 指向虚函数的指针是否仍会被虚拟调用?

指向声明为虚函数的类成员函数的函数指针是否有效?classA{public:virtualvoidfunction(intparam){...};}classB:publicA{virtualvoidfunction(intparam){...};}//impl:Bb;A*a=(A*)&b;typedefvoid(A::*FP)(intparam);FPfuncPtr=&A::function;(a->*(funcPtr))(1234);B::function会被调用吗? 最佳答案 是的。在codepad上测试的有效代码或ideon

c++ - 不用调试工具的调试技巧

我发现自己处于几乎没有任何调试工具的情况下不得不调试Qt应用程序的困难境地:应用程序似乎开始使用越来越多的CPU,因为它一次又一次地运行相同的操作;许多小时后CPU完全饱和。该应用程序在ARMLinux嵌入式设备上运行,其中gdb似乎无法工作,可能很难通过提供的工具链发现问题。strace似乎只报告计时器事件(这是一个OpenGL应用程序,所以这是预期的)。ltrace不可用,编译它导致了一项艰巨的任务,也许毫无用处。我没有编写应用程序,但源代码可用。我还能做些什么来发现应用程序在消耗那么多资源时忙于做什么吗?我必须以任何方式跟踪应用程序执行的所有方法调用吗?我可以使用任何其他技术来尝

c++ - 调试会改变多线程 C++ 程序的行为吗?

我正在开发一个处理大量同步问题的多线程C++程序。我正在使用VisualStudio2008。当我使用断点调试程序时,程序的运行时行为(跨线程执行语句的顺序)似乎发生了变化。这可以解释吗?这里的概念是什么?我希望执行顺序保持不变。第二个问题-Thread1是否被等待函数调用阻塞。Thread2有等待执行的语句,处于就绪状态。是否存在程序会等待Thread1继续执行而不是将执行交给Thread2的情况?我已经删除了两个线程之间的所有依赖关系,并确保Thread2没有在等待任何资源。感谢回复。 最佳答案 Thisarticleonmul

c++ - QtCreator 调试器不显示 std::string 的值

我试图调试我的小词法分析器并遇到了这个问题:QtCreator-Debugger不显示我的std::string-variable的任何内容。我尝试在控制台中对其进行调试,但得到了相同的结果,只是简单的结构信息。我前几天用的那个版本的QtCreator确实显示了字符串的内容。所有其他STL元素,如std::vector、std::map、std::multimap等显示正确的数据,只是std::string类不正确。经过几个小时的谷歌搜索后,我发现了很多描述pretty-print创建的网页,我解决这个问题的非常笨拙的方法并没有帮助。我有什么想法可以摆脱这个错误吗?注意:字符串变量的“

c++ - 层次结构中的所有派生类都需要访问虚拟基类吗?

当我尝试编译以下代码时:classA{public:A(intv):virt(v){}intvirt;intgetVirt(void)const{returnvirt;}};classB:privatevirtualA{protected:B(intv):A(v){}usingA::getVirt;};classC:publicB,privatevirtualA{protected:C(intv):A(v),B(v){}usingA::getVirt;};classD:publicC{public:D(void):C(3){}usingC::getVirt;};#includeintm

二进制安全虚拟机Protostar靶场(5)堆的简单介绍以及实战 heap0

前言这是一个系列文章,之前已经介绍过一些二进制安全的基础知识,这里就不过多重复提及,不熟悉的同学可以去看看我之前写的文章什么是堆堆是动态内存分配的区域,程序在运行时用来分配内存。它与栈不同,栈用于静态分配内存,并且具有固定的大小程序使用如malloc、calloc、realloc等函数在堆上动态分配内存。当内存不再需要时,使用free函数释放。例如:intmain(intargc,char**argv){structdata*d;d=malloc(sizeof(structdata));}通过malloc函数分配的堆地址:接下来就用实战来讲解堆的运作机制heap0#include#includ

c++ - 反汇编多重继承中的虚拟方法。 vtable 是如何工作的?

假设以下C++源文件:#includeclassBaseTest{public:inta;BaseTest():a(2){}virtualintgB(){returna;};};classSubTest:publicBaseTest{public:intb;SubTest():b(4){}};classTriTest:publicBaseTest{public:intc;TriTest():c(42){}};classEvilTest:publicSubTest,publicTriTest{public:virtualintgB(){returnb;}};intmain(){EvilT

c++11 将 std::tuple 解压到虚拟成员函数中

完整故事:我正在尝试构建一个看起来有点像这样的框架:#include#includeusingnamespacestd;//thisclassallowsusertocall"run"withoutanyargsclasssimulation_base{public:intrun(){execute_simulation_wrapped();};protected:virtualintexecute_simulation_wrapped();{return0;};}//thisclassfunnelssomestoredinputsintoasoon-to-be-overriddenm

gdb调试常见命令详细总结(附示例操作)

一、简介通过gdb调试我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码,程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。本文将主要介绍linux下的gdb调试工具常用的命令和具体的使用实例。二、调试过程介绍2.1编译程序加参数时生成调试信息-g和-ggdb都是令gcc生成调试信息,但是它们也是有区别的选项解析g该选项可以利用操作系统的“原生格式(nativeformat)”生成调试信息。GDB可以直接利用这个信息,其它调试器也可以使用这个调试信息ggdb使GCC为GDB生成专用的更为丰