草庐IT

DEBUGGING

全部标签

c++ - 了解一些 C++ 编码实践

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。我目前正在尝试了解以下代码(http://pastebin.com/zTHUrmyx)是如何工作的,我的方法目前是在调试中编译软件并使用gdb单步执行代码。但是,我遇到了“步骤”并不总是告诉我发生了什么的问题。我特别不清楚的是我无法进入的EXECUTE{...}。我如何着手了解代码的作用?1/*2Copyright2008BrainResearchInst

c++ - 计算机缺少 MSVCP100D.dll 文件

我遇到的是当我想将我创建的exe调试项目(可以正常工作)复制到另一台机器(显示错误消息)时显示此错误。根据questionpostedpreviously,消除错误消息的最佳解决方案是在配置管理器中发布而不是调试。这样做,并且在使用RELEASE重建项目时,我的项目中出现了新的错误,这些错误在进行DEBUG时没有包括在内。例如,其中之一是:Error2errorC1083:Cannotopenincludefile:'opencv\highgui.h':Nosuchfileordirectoryc:\...\projects\...\ex\opencv.h423IntelliSense

c++ - 从长远来看,使用调试器和大量使用 C++ 模板是否不兼容?

我正在从事一个使用大量模板和库(如boost::fusion)的项目,我发现自己正在为一个可执行文件而苦苦挣扎,截至今天,该可执行文件的大小为600MB,而gdb仅需要1.7GB的内存来加载它,和符号查找将使它使用近3GBs..剥离后的二进制文件大约为5MB。问题是,为了生成更小的调试符号,是否需要做些什么?这不仅是gdb的问题,也是链接器的问题,链接器在链接使用-g标志编译的对象时使用另外1.2GB的RAM我试过-g1-g2和-g3,问题还是一样。 最佳答案 isthereanythingtobedoneinordertogene

c++ - 使用制表符完成打印变量时 gdb 卡住

我编译的c++项目,不算大,大约6M二进制。当我调试它并想要打印一些变量时,我输入前两个字符并按Tab键完成。然后gdb读取符号永远卡住。我怎么解决这个问题。谢谢! 最佳答案 ItypethefirsttwocharactersandpresstheTabtocomplete.Thenthegdbreadsymbolsforeverfreezing.HowcanIsolvethisproblem医生,我这样做的时候很疼。好吧,别那样做。说真的,如果你有一个非常大的二进制文件(不清楚你的6MB是否是有调试信息的大小),以及很多变量,那

c++ - 在移动的 lambda 中捕获和调试对局部变量引用的无效使用

在我的一个实际项目中,我遇到了一个难以调试的情况,我不小心访问了对已移动的lambda内部局部变量的引用。访问是从另一个线程完成的,但是移动的lambda一直保持事件状态,直到第二个线程完成。该错误仅在禁用优化时出现,并且是由粗心的重构引起的。我创建了一个最小示例(availablehereonwandbox)重现问题:structstate{intx=100;};templatevoideat1(TF&&f){//Callthelambda.f();//Simulatewaitingforthesecondthread//tofinish.std::this_thread::slee

c++ - 有用的东西放在 minidumps 的用户流段

我感兴趣的是开发人员在用户流数据结构中放入了哪些有用的东西,这些东西可以嵌入到小型转储中。MSDN是这样描述MiniDumpWriteDump的参数的:PMINIDUMP_USER_STREAM_INFORMATION用户流参数并这样描述参数:UserStreamParam[in]PointertoanarrayofMINIDUMP_USER_STREAM_INFORMATIONstructures.IfthevalueofthisparameterisNULL,nouser-definedinformationisincludedintheminidumpfile.我正在考虑将我程序

使用 gdb 的 C++ 特定调试技巧

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。您最喜欢使用gdb调试C++程序的一些技巧是什么?对所有技巧都感兴趣,但也如何从gdb中调用对象的方法(可能是虚拟的)检查STL对象(漂亮地打印它们)防止gdb使用continue进入STL代码处理内联、线程、tcmalloc(或自定义分配器)跨不同session保留gdb命令的历史记录

c++ - 为什么在 Windows 上由于 vector 删除而调用标量删除析构函数?

我有一个在Windows上泄漏的代码。它在许多unix平台上运行良好,泄漏只发生在Windows上。二进制文件由exe、1个dll和2个静态库组成。exe链接到dll和静态库,而静态库也链接到dll。当由于某种原因调用标量删除析构函数而不是调用vector删除析构函数时,exe代码中会发生泄漏。这导致仅删除数组中的第一个对象,而数组的其余部分保留在内存中。泄漏的伪代码如下所示:classMyClassFromExe:publicMyBaseClassFromDll{public:ClassFromDll*m_arr;MyClassFromExe(unsignedintsize){m_a

c++ - Boost Geometry/intersection() 似乎返回不一致的结果

我有一个适用于BoostGeometry的3Dvector作为2D点和环:BOOST_GEOMETRY_REGISTER_POINT_2D(Vector3,float,cs::cartesian,x,y)BOOST_GEOMETRY_REGISTER_RING(std::vector)然后:画一些非凸多边形(环)绘制线段,切割非凸多边形并将其一分为二(较小的通常是三角形)在线段上镜像较小的2个新多边形结果是两个多边形,它们重叠并且有1个切边。然后我检查两个多边形的交点。在15%的情况下,相交结果是空的,这是一个惊喜(较小的多边形可以有面积1.0f..10.f,所以它不是一个极端情况)s

c++ - 在 Visual Studio 中,我可以在断点处绘制我的变量吗?

在我的nativeC++程序的VisualStudio中,我想在调试期间获取一些变量的绘图。大多数情况下,我通过编辑autoexp.dat使用对象的文本表示。但对于某些变量,最好绘制图表而不是文本形式的值。到目前为止,我使用了一个函数plot(constvoid*address,constchar*type),并从立即窗口调用它,给出变量地址和类型,并在内部将其转换为正确的类型。但是这种方法有两个缺点:首先是,当从调试器调用函数时,函数重载几乎不起作用(因此我不得不将类型作为第二个参数传递),并且函数调用偶尔会崩溃,尽管从代码中调用时它工作得很好。其次,我没有编写用于绘图的C++函数,