草庐IT

DEBUGGING

全部标签

c++ - Eclipse CDT 调试 : Show dynamic type

我正在使用CDT进行C++开发,它使用gdb进行调试。调试变量View仅显示变量的声明类型-而不是基于vtable信息的实际类型。由于我严重依赖动态子类化,声明的类型通常不包含我需要的信息。我还必须检查实际子类的值。我发现了这个问题:vtableinpolymorphicclassofC++usinggdb据说gdb能够使用以下命令打印基于vtable信息的实际类型:setprintobjecton但是如何在EclipseCDT中执行此操作?顺便说一句:这不是一个很常见的用例,所以默认情况下应该启用它吗?一旦有人使用继承和虚拟的东西,在调试过程中看到真实的对象类型就非常重要。仅显示已声

c++ - 另一个进程中的断点处理

遵循Readeaxregister中给出的建议,我使用winapi编写了一个简单的调试器。我的目标是每次在另一个线程中执行汇编指令后读取eax寄存器。它正在运行,我设法在另一个进程中放置了一个硬件断点。当断点到达被调试线程内部时,问题出现了,我可以按预期读取eax寄存器,但我仍然找不到任何方法来恢复线程的执行。我的代码:int_tmain(intargc,_TCHAR*argv[]){//FindingWindowHWNDwindow=FindWindow(0,_T("Test"));if(window==0){printf("Processnotfound!\n");return0;

c++ - 简单代码导致错误读取变量: Cannot access memory at address

我正在尝试使用支持python的gdbMinGW-builds.我遇到了一个错误。这是一个相当简单的代码,在MSVC下调试时它工作正常。D:\CppProject\c1\bin\Debug>gdbc1.exeGNUgdb(GDB)7.6(copyright,license,bugreport,etcomittedhere)ReadingsymbolsfromD:\CppProject\c1\bin\Debug\c1.exe...done.(gdb)l1#include2#include34usingnamespacestd;56intmain()7{8vectorv;9v.push_b

c++ - Android 调试 native 代码

我正在使用ndk-r9,我正在努力让ndk-gdb为我工作。我已经启动了一个名为“LittlestAndroid”的小型Android应用程序,它对返回硬编码字符串的nativeC++方法进行了简单调用。该应用程序构建/安装/运行得很好。现在我正在重新调整应用程序的用途以了解ndk-gdb。我在list中设置了debuggable="true"。我在我的make中设置了这些环境变量:APP_OPTIM=debugLOCAL_CFLAGS:=-g我已经破解了$NDK_HOME/build/core/build-binary.mk文件,使用以下命令有条件地去除调试符号:$(LOCAL_IN

c++ - 如何在 C++ 中调用函数时打印每个函数名称?

我正在探索一个大型代码库,我不是gdb的粉丝。我想加一个LOG(INFO)在代码库中每个函数的第一行。但这非常乏味。有谁知道进行所有函数调用以打印带有函数名称的LOG消息的技巧? 最佳答案 我做了类似的事情:#includeclassLogScope{public:LogScope(constchar*scope,constchar*file,intline=0):m_scope(scope),m_file(file),m_line(line){std::clog 关于c++-如何在C+

c++ - 保存并重新启动暂停的 gdb session

我的理解是gdb可以监控正在运行的程序的完整状态。我可以保存在断点处暂停的gdbsession并稍后恢复session吗?我的第一次尝试只是在断点处暂停的第一个gdbsession中生成核心转储,然后使用核心转储启动第二个gdbsession。Savingcorefileingdb这导致了以下错误。ProgramterminatedwithsignalSIGTRAP,Trace/breakpointtrap.所以断点信息被插入到程序状态中,有意思。在我第二次尝试时,我做了同样的事情,但这次我在第二个session中添加了与第一个session中相同的断点。Gettinggdbtosav

c++ - 如何捕获 C++ 代码中奇怪的未定义行为?

我在服务器程序中有奇怪的行为。在简单的示例中,它工作正常(我在pion和asio中的任何地方都插入了跟踪)。#include#include#include#include#include#includeintmain(){pion::single_service_schedulershed;shed.set_num_threads(1);boost::shared_ptrserver(newpion::http::server(shed,5000));server->add_resource("/",handlerFunction);server->start();sleep(5);

c++ - Visual Studio(或任何其他工具)能否将地址解释为调用堆栈的开始( boost 上下文)?

是否可以告诉VisualStudio(或任何其他主要操作系统上的任何其他工具)将地址解释为调用堆栈的开头?我想要实现的目标:我们有一个库,它使用boost的make_fcontext/jump_fcontext并将这些上下文存储到一个容器,以便暂停一些调用以供以后处理。我的问题是-是否有可能以某种方式调试这些挂起的调用是什么?我想,我可以告诉调试器/工具类似:“这是这个地址,虽然它并不明显,但它实际上指向一个调用堆栈,‘解析’它并像标准调用堆栈一样显示给我”。不知道这在理论上是否可行,因为我不知道boost::context的细节,但它听起来是可以实现的。有没有人尝试过处理这个问题?

c++ - 使用 GDB 在 Windows 下调试 DLL

我有一些项目由几个DLL组成,这些DLL是用MinGW编译的,带有调试信息,另一个项目的EXE目标使用这些DLL(也是用MinGW编译的)。问题是,我需要在那些DLL中的函数上放置断点,但是GDB虽然设置了断点,但只是在运行时默默地忽略了它们。进入它们(使用's'键)只是跳过它们(就像使用'n'键一样)。我怎样才能进入那些DLL?也许我应该为GDB指定一些选项?提前致谢。 最佳答案 确保使用gccoptimizationlevel进行编译标志设置为0(-O0)。 关于c++-使用GDB在

c++ - 当我什至无法进入代码时如何调试 "This application has requested the Runtime to terminate it in an unusual way."?

我有一个C++程序,它在进程启动后立即给出此错误-显然是在任何用户代码执行之前。它仅在启用内联时发生。即使内置了调试符号,我也无法进入代码。当我在VisualStudio中按下F10时,我收到了错误并且程序停止了。我在“调试/异常”中检查了所有异常/检查,但仍然没有休息。通常我会认为这样的事情是由于缺少运行时依赖项造成的,但我很肯定这不是这里的情况(已通过DependencyWalker验证)。编辑:我使用了SteveTownsend对CDB的推荐,现在我能够单步执行程序的预用户代码部分。最终的堆栈跟踪是:Child-SPRetAddrCallSite00000000`0008e308