草庐IT

DEBUGGING

全部标签

c++ - 如何在 C++ 中的空语句上设置断点?

具体来说,我想写一个宏1)允许我设置断点2)什么都不做3)不会导致编译器警告#defineNO_OP((void)0)voidmain(){boolb=true;if(b)NO_OP;//Itrytosetabreakpointhere,but}//itjumpstohere(inVisualStudio2010)我也试过#defineNO_OP(assert(1))//doesn'twork#defineNO_OP(sizeof(int))//doesn'twork#defineNO_OP__asm{}//doesn'twork#defineNO_OPdo{(void)0;}whil

c++ - 如何解释 .stackdump 文件?

这个问题很可能是UsingastackdumpfromCygwinexecutable的重复问题-但我是初学者,我不明白答案,甚至部分问题。我是C++和编程的新手,我正在使用NetBeans进行开发。我正在处理一些编译得很好但运行时失败的代码。如果我使用调试器,我会收到以下错误:1[main]all6200exception::handle:Exception:STATUS_ACCESS_VIOLATION881[main]all6200open_stackdumpfile:Dumpingstacktracetoall.exe.stackdump我已经设法找到文件all.exe.sta

c++ - 如何解释 .stackdump 文件?

这个问题很可能是UsingastackdumpfromCygwinexecutable的重复问题-但我是初学者,我不明白答案,甚至部分问题。我是C++和编程的新手,我正在使用NetBeans进行开发。我正在处理一些编译得很好但运行时失败的代码。如果我使用调试器,我会收到以下错误:1[main]all6200exception::handle:Exception:STATUS_ACCESS_VIOLATION881[main]all6200open_stackdumpfile:Dumpingstacktracetoall.exe.stackdump我已经设法找到文件all.exe.sta

c++ - 我正在寻找一种在 VS2012 中通过 NatVis 显示 UUID 的正确方法

我正在寻找一种在VS2012中通过NatVis显示UUID的正确方法。我自己的uuid类型在内部使用UUIDbig-endian,因此转换为(GUID*)不起作用,因为GUID在Windows中使用little-endian。所以我总是看到一个误传的uuid。此外,Natvis中的任何格式说明符看起来都不好,因为在使用十六进制表示法时我无法摆脱输出中的0x。有什么想法吗? 最佳答案 这是一个更紧凑的ComicSansMS解决方案版本。我使用SHA1结构和可视化工具作为示例。structSHA1{charhash[20];};name

c++ - 我正在寻找一种在 VS2012 中通过 NatVis 显示 UUID 的正确方法

我正在寻找一种在VS2012中通过NatVis显示UUID的正确方法。我自己的uuid类型在内部使用UUIDbig-endian,因此转换为(GUID*)不起作用,因为GUID在Windows中使用little-endian。所以我总是看到一个误传的uuid。此外,Natvis中的任何格式说明符看起来都不好,因为在使用十六进制表示法时我无法摆脱输出中的0x。有什么想法吗? 最佳答案 这是一个更紧凑的ComicSansMS解决方案版本。我使用SHA1结构和可视化工具作为示例。structSHA1{charhash[20];};name

c++ - 是否有针对 C++14 或更高版本的标准化回溯和其他调试实用程序的计划?

是否有计划将标准化的回溯和其他调试实用程序添加到C++14(或更高版本)中,还是会继续作为操作系统或编译器添加的功能? 最佳答案 没有。没有计划。一方面,标准没有指定如何进行函数调用。实际上,这取决于硬件。您可能不知道这一点,但是那里的硬件不会将返回地址推送到堆栈上。其中一些使用动态jmp指令,而另一些则使用返回队列来跟踪返回地址。您所指的堆栈跟踪可能在处理器的一个子集上(尽管很大),但是由于C和C++旨在在尽可能多的处理器上运行,因此它不会也不能定义标准方式执行回溯,这将决定硬件的制造方式。

c++ - 是否有针对 C++14 或更高版本的标准化回溯和其他调试实用程序的计划?

是否有计划将标准化的回溯和其他调试实用程序添加到C++14(或更高版本)中,还是会继续作为操作系统或编译器添加的功能? 最佳答案 没有。没有计划。一方面,标准没有指定如何进行函数调用。实际上,这取决于硬件。您可能不知道这一点,但是那里的硬件不会将返回地址推送到堆栈上。其中一些使用动态jmp指令,而另一些则使用返回队列来跟踪返回地址。您所指的堆栈跟踪可能在处理器的一个子集上(尽管很大),但是由于C和C++旨在在尽可能多的处理器上运行,因此它不会也不能定义标准方式执行回溯,这将决定硬件的制造方式。

c++ - 解决错误: Stack around the variable 'x' was corrupted的一般方法

我有一个程序在调试时提示我VS2010中的错误:Error:Stackaroundthevariable'x'wascorrupted这为我提供了可能发生堆栈溢出的函数,但我无法直观地看到问题出在哪里。有没有用VS2010调试这个错误的通用方法?是否有可能确定哪个写操作覆盖了不正确的堆栈内存?谢谢 最佳答案 IsthereageneralwaytodebugthiserrorwithVS2010?不,没有。您所做的是以某种方式调用未定义的行为。这些行为未定义的原因是一般情况很难检测/诊断。有时证明是不可能的。但是,通常会导致您的问题

c++ - 解决错误: Stack around the variable 'x' was corrupted的一般方法

我有一个程序在调试时提示我VS2010中的错误:Error:Stackaroundthevariable'x'wascorrupted这为我提供了可能发生堆栈溢出的函数,但我无法直观地看到问题出在哪里。有没有用VS2010调试这个错误的通用方法?是否有可能确定哪个写操作覆盖了不正确的堆栈内存?谢谢 最佳答案 IsthereageneralwaytodebugthiserrorwithVS2010?不,没有。您所做的是以某种方式调用未定义的行为。这些行为未定义的原因是一般情况很难检测/诊断。有时证明是不可能的。但是,通常会导致您的问题

c++ - 在客户端机器上调试发布版本

我们有一个使用VisualStudio2005构建的原生C++Win32.exe,它可以在我们内部测试过的所有机器(XP32位、Vista32位和Windows764位)上完美运行。但当然,它会在客户端的32位Vista机器上反复崩溃。在几个网站上四处挖掘,我发现了一些花絮,这些花絮表明我是否将PDB文件(vc80.pdb和projectName.pdb)连同可执行文件的发布版本一起发送给客户,有一些发生崩溃时生成小型转储的方式。然后,我可以将故障转储加载到VisualStudio并获取堆栈跟踪和其他一些有用信息。微软的Dr.Watson实用程序似乎也参与了这个过程。但我找不到任何明确