草庐IT

DEBUGGING

全部标签

c++ - 查找抛出 std::out_of_range 的对象

我的一个程序抛出一个std::out_of_range。我知道这样做的原因,我正在某处访问索引为-1的vector。我不知道的是vector的名称(变量名称)和代码中的位置。我的程序产生的错误消息如下所示:terminatecalledafterthrowinganinstanceof'std::out_of_range'what():vector::_M_range_checkzsh:abort(coredumped)./main.xconfig.cfg而由其他人(他也使用g++)的代码生成的错误消息发布在问题C++accessingvector中看起来像这样:Errorforvec

c++ - 可以在 gdb 中调用内联函数和/或使用 GCC 发出它们吗?

我们都知道内联函数会使调试变得更加棘手,因为它们可以从堆栈跟踪等中删除。但是假设我想从gdb中调用一个内联函数,并且我知道它的名称和参数。我认为我应该能够做到这一点,但我明白了:Cannotevaluatefunction--maybeinlined我用nm列出了我正在使用的共享库中的符号,发现我要调用的函数不在里面。没什么大惊喜。我想要的是一种生成这些内联函数的可见定义的方法。我可以访问当前包含内联定义的头文件,但我无法真正修改这些头文件。也许有某种方法可以告诉编译器发出它在翻译单元中看到的所有内联函数的定义?或者其他一些可以更轻松地在gdb中调用和检查内联函数结果的技巧?我在Lin

c++ - 如何在退出时调试 CorExitProcess 中的访问冲突 0xC0000005?

我们的应用程序(用C++编写,VS2010项目)在Windows8之前的所有操作系统上运行良好(现在仍然如此)。然而,在Windows8上,当有序退出应用程序时,会发生访问冲突:mfc100.dll!_DllMain@12()InanMSDNforumtopic建议在退出前运行GC.Collect(),但在退出前不久我无法对这样的调用产生任何影响。我有点不知该如何调试这个问题。据我了解,CorExitProcess负责清理应用程序的托管资源。那么这可能是托管组件中的错误吗?或者更有可能是_DllMain中的某些函数指针已被覆盖/损坏?如果是这样,我将如何在相关地址设置数据断点?有apo

c++ - 使用通配符设置断点?

我正在尝试调试一个严重依赖继承的类。调试session很乏味,因为它涉及一个对象在链中的另一个对象上调用相同的函数。我在单步执行不相关的代码上浪费了很多时间,这些代码本可以用在其他地方更好。这是简单的:我想使用通配符在类实例上设置断点,例如bFoo::*.这样,当我感兴趣的东西进入作用域(如静态函数或成员函数)时,调试器就会捕捉。这是困难的一个:参数化类:我想使用通配符在模板化类的成员函数上设置断点,例如bFoo::bar.(实际问题比这更糟糕,因为模板参数本身就是模板类)。虽然GDB似乎让我设置一个,但调试器并没有停止(见下文)。它声称它在未来的负载上设置了一个断点。事实上,我使用静

c++ - 如何在 VC6 监 window 口中获取变量的完整字符串值?

我想在VC6监window口中获取char[]变量的完整值,但它只显示截断的版本。我可以从调试内存窗口复制值,但它包含十六进制和字符串值的混合行。当然有更好的方法吗?? 最佳答案 对于大字符串,您几乎会被内存窗口困住——工具提示最终会被截断。幸运的是,内存窗口很容易从中获取数据——我倾向于以8字节的block显示它,因此它易于管理,找到你的字符串数据并将其剪切并粘贴到一个空白窗口中,然后使用alt+拖动到选择列并删除十六进制值。然后从字符串的底部开始并不断向上翻页/删除(换行符)以构建您的字符串(我为该位使用了一个宏)。一旦你得到长

c++ - 如何调试段错误

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

c++ - Lua & C++ API 获取执行信息

在Lua中,我有一个名为utils.debug()的函数,我想做的是在我的Lua代码中使用它,如下所示:functionFoo:doSomethingif(/*something*/)thenprint("Success!")elseutils.debug()endendfunctionFoo:doSomethingElseif(/*somethingelse*/)thenprint("Awesome!")elseutils.debug()endend我想在我的整个Lua代码中使用它来帮助我进行调试。因此,我希望我的C++代码知道utils.debug()在Lua代码中的何处被调用。我

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

c++ - 使用 libpcl_surface 在 boost::math::lanczos 中调试段错误

仅当我在使用调试标志编译的代码上使用gdb进行调试时,才会出现以下错误ProgramreceivedsignalSIGSEGV,Segmentationfault.0x00007fffc79a7ff0inboost::math::lanczos::lanczos_initializer::init::init()()from/usr/lib/libpcl_surface.so.1.7操作系统:unbutu14.04我有最新的pcl库(1.7Sprikelhof)和boost库(1.54)请注意,在gdb外部运行时不会出现段错误。 最佳答案