草庐IT

DEBUGGING

全部标签

c++ - 记录/监控来自应用程序的所有函数调用

我们正在开发的应用程序有问题。应用程序在启动时崩溃的情况很少见,大约有100次。当崩溃发生时,它会导致整个系统崩溃,计算机开始发出哔哔声并完全死机,唯一的恢复方法是关闭电源(我们使用的是WindowsXP)。崩溃的罕见性加上我们无法进入调试器甚至在崩溃发生时生成堆栈转储这一事实使得调试变得极其困难。我正在寻找将所有函数调用记录到文件中的东西。这样的工具存在吗?这应该不是不可能实现的,像VTune这样的分析器做的事情非常相似。我们使用的是visualstudio2008(C++)。谢谢A.B. 最佳答案 记录函数进入/退出是解决您的问

c++ - 如何保证在 Visual Studio 2005 下的 C++ 中捕获 EXCEPTION_STACK_OVERFLOW 结构化异常?

背景我有一个带有Poof-Crash[1]的应用程序。我相当确定这是由于堆栈损坏造成的。应用程序是多线程的。我正在使用“启用C++异常:是的,带有SEH异常(/EHa)”进行编译。我编写了一个SE翻译器函数并用它调用了_set_se_translator()。我已经为set_terminate()和set_unexpected()编写了函数并进行了设置。为了获得StackOverflow,我必须在高负载下以Release模式运行几天。在调试器下运行不是一种选择,因为应用程序的执行速度不足以达到查看问题所需的运行时间。我可以通过在执行其中一个函数时添加无限递归来模拟该问题,从而测试是否捕

c++ - 在 gdb 中跟踪对类实例/内存范围的写访问

我正在尝试调试我在大学类(class)中用C++编写的小型操作系统。在运行时某处我的对象之一被损坏。这似乎是由于不小心写入了错误的内存地址而发生的。由于我无法从纯看代码找到发生这种情况的地方,我需要另一种方式。由于这是一个操作系统,我无法将valgrind之类的工具附加到它,但我可以在附加了gdb的模拟器(bochs/qemu)中运行它。gdb中是否有一种方法可以跟踪对类实例或更一般的特定内存范围的写访问?我想在写访问发生时立即中断,这样我就可以验证这是否有效。 最佳答案 你可以放置一个观察点:watchx当x被修改时,这将中断。x

c++ - 有没有办法比较 C/C++ 程序的两次不同运行?

所以我正在调试这个我从即将毕业的博士生那里继承的程序,或者在学生完成论文后发生的任何事情。无论如何,现在我有责任调试它。该程序基本上接收几个文本文件并对其进行处理。我一直遇到的问题(段错误)是因为程序试图访问尚未初始化的数组。我想知道是否有任何调试工具可以让您运行程序,并比较程序运行的两个不同路径。我想我可以手动完成该程序,但我宁愿不这样做,因为它相当大,而且我还没有掌握它。我一直在使用GDB和Valgrind(以及使用g++-wall来显示警告),这就是我走到这一步的方式。但是有没有什么软件可以让你做我上面描述的事情,或者甚至只是引导你完成你的程序。 最佳

c++ - 阻止调试器进入功能

我正在寻找一种方法来阻止VisualStudio调试器在按F11时进入某些类和函数。或者阻止一些文件,这样IDE就不会打开它们,只需逐步执行(除非出现异常)。我知道这听起来有点愚蠢,但我正在使用智能指针和其他辅助类,许多重载运算符,简单表达式由许多函数调用组成,在优化时消失,所以这不是速度问题,但它是一个调试问题,一直打开和关闭那么多文件,经历了很多函数,不小心留下了目标代码等等。这是我正在谈论的例子:stepToThisFunction(objectOfIgnoreClass->ignoreFunction());当调试器在这一行时,按F11应该只输入stepToThisFuncti

c++ - 当我没有 Xcode 项目时,如何在 Mac OS 上获得可视化调试器?

我正在将一个项目移植到OSX。我发现控制台中的GDB调试功能严重不足,我真的需要一个可视化调试器。我的项目是使用Scons构建的,因此它完全避开了Xcode的IDE。在我需要启动可视化调试器并单步执行我的代码之前,这是可以接受的。除了生成和维护Xcode项目(以补充我已经支持的所有其他平台)之外,我还可以做些什么来在OSX上启动和运行可视化调试器?这是一个C++项目。 最佳答案 简单:启动XCode点击顶部菜单中的“运行”选择attachtoprocess,选择你要调试的进程确保在完全调试的情况下进行编译……这意味着使用选项-ggd

c++ - std::vector<std::string> 崩溃

这个问题是myquestion的延续.这是有问题的代码。嗯:#include#includestd::vectorfoo();a.cpp#include"a.h"std::vectorfoo(){std::vectorv;returnv;}最后是main.cpp:#include"a.h"#includeintmain(){std::vectors=foo();return0;}编译如下(main.cpp是带STL调试标志编译的):g++-ca.cppg++-D_GLIBCXX_DEBUGmain.cppa.o运行a.out时,进程崩溃:Corewasgeneratedby`./a.o

c++ - gdb:tstart 错误 "You can' 的含义 t 当你的目标是 `exec' 时执行此操作“

我想记录一个局部变量的值,t,每次程序到达某一行时。因此,我尝试了:(gdb)tracestoer_wagner_min_cut.hpp:197Tracepoint1at0x4123a0:file./boost/graph/stoer_wagner_min_cut.hpp,line197.(gdb)actionsEnteractionsfortracepoint1,oneperline.Endwithalinesayingjust"end".>collectt>end(gdb)tstartYoucan'tdothatwhenyourtargetis`exec'(gdb)breakmai

c++ - Visual Studio 断点宏修改一个值?

我正在调试一个应用程序(C++),我在代码中发现了一个我想更改值的点(通过调试器)。所以现在,我设置了一个断点,于是我做了:调试器到达断点我修改我想改变的变量我按F5键继续运行起泡、冲洗、重复它经常遇到这个断点,所以我想自动化它。我想设置断点来运行一个宏,然后继续执行。但是,我没有编写VisualStudio宏的经验,所以我不知道修改正在执行程序的变量的命令。我环顾四周,但到目前为止还没有在网上找到任何有用的信息。 最佳答案 我找到了如何使用宏来执行此操作。最初,我尝试使用Ctrl-Shift-R来记录击键宏,但是当我使用Ctrl-

c++ - (定义一个宏来)方便OpenGL命令调试?

有时需要很长时间插入条件打印并检查glGetError()以使用二进制搜索形式缩小范围,其中第一个函数调用是OpenGL首先报告错误。我认为,如果有一种方法可以构建一个宏,我可以环绕所有可能失败的GL调用,并在之后立即有条件地调用glGetError,那将会很酷。当为一个特殊目标编译时,我可以让它以非常高的粒度检查glGetError,而为典型的发布或调试编译时,这不会被启用(我只会每帧检查一次)。这样做有意义吗?稍微搜索了一下,我发现一些人建议在每次非绘制gl调用之后调用glGetError,这基本上与我描述的相同。那么在这种情况下,我可以做些什么(上下文:我正在使用GLEW)来简化