草庐IT

DEBUGGING

全部标签

c++ - 为什么在 VC++ 调试器上计算表达式时会出现 "member function not present"错误?

我在另一个DLLMyDll.dll上有一个静态方法MyClass::myMethod()。在我的代码中,我调用了这个方法,它编译并运行良好。但是当我在即时窗口(或监window口)中尝试MyClass::myMethod()时,我总是得到:MyClass::myMethod()CXX0052:Error:memberfunctionnotpresent这是为什么?更新:我发现当我使用contextoperator它有效:{,,MyDLL}MyClass::myMethod()不过,我不太确定为什么需要它,所以我要稍等片刻,看看是否有人有很好的解释。更新2:我被要求提供更多信息。不幸的是

c++ - 如果异常将由特定的 catch block 处理,如何导致 C++ 抛出转储核心

如果抛出的异常将由特定的catchblock处理,是否有办法导致C++中的抛出在抛出点转储核心?当异常到达顶层时,我想要类似于g++所发生的事情。例如,我想要这样的东西:try{bar();try{foo();}catch(...){#pragmadump_at_throw_site}}catch(...){std::cerr这样,如果从foo()或其被调用者抛出的任何异常到达foo()的调用点,就会导致核心转储在抛出点,这样就可以看到是谁抛出的达到此级别的异常。另一方面,bar()抛出的异常将被正常处理。 最佳答案 是的,它可以在

c++ - 调试从托管应用程序调用的 C++ 代码时看不到变量内容

我有一些从托管C++类库(“Rem”)调用的nativeCDLL。在“Rem”类库中,我有一个nativeC++类(api)和一个托管C++类(API)。托管类(API)现在从C#控制台应用程序调用(稍后将在Web应用程序中使用)。在调试时,我可以很好地单步执行我的native代码。我的问题是,在调试时,除了本地声明的简单类型外,我看不到任何变量的值。函数参数在调试器中不可用,如果我尝试将它们添加为Watch,它只会显示“错误:标识符‘schema_name’超出范围”(‘schema_name’是变量名)任何结构都只在快速观察和观察窗口中显示值“{...}”。如果我尝试将监视添加到结

c++ - 如何在 QtCreator 的调试器中显示 std::multimap 和 std::multiset 的内容?

我正在尝试检查std::multimap和std::multiset的内容QtCreator。我显示的不是值列表,而是实现细节。奇怪的是std::map和std::set对应项显示正常:#include#include#include#includeintmain(){std::multimapmultimap;multimap.insert(std::make_pair(1,"one"));multimap.insert(std::make_pair(2,"two"));multimap.insert(std::make_pair(3,"three"));std::multisetm

c++ - GDB - 如何从一开始就进入步进模式

通常,要从C++程序执行的一开始就进入步进模式,可以在GDB中使用breakmain命令。但这只会在main()函数的入口处中断程序。如何在用户编写的第一个操作(例如,静态定义类实例的构造函数)上中断程序?例如,如果我有以下代码,我如何在不使用break5命令的情况下在A()处中断?#includestructA{A(){std::cout实际上,我调试的是别人写的非常大的代码。该代码有很多分散在不同源文件中的静态类实例。在每个构造函数上手动设置断点是不可行的。 最佳答案 您可以在构造函数中定义一个断点。(gdb)break'A::

c++ - gdb 在 ARM 上报告的回溯中只有问号

我正在尝试在ARM上使用gdbserver调试软件以获得崩溃的回溯。不幸的是我只得到问号。我到处都读到这个问题只是与缺少符号有关,但符号并没有从我的库中删除。如果我尝试使用文件命令在客户端加载符号,我得到:readingsymbolsfrom/libQtWebKit.so.4.7.2...(nodebuggingsymbolsfound)...done.然后,当崩溃发生时:ProgramreceivedsignalSIGSEGV,Segmentationfault.0x00000000in??()(gdb)bt#00x00000000in??()#10x4bf38b88in??()Ba

c++ - 如何使用 NVidia GPU 在 Windows 下逐步调试 OpenCL GPU 应用程序

我想知道您是否知道使用Windows(我的IDE是VisualStudio)逐步调试OpenCL内核并在NVidiaGPU上运行OpenCL内核的任何方法。目前我发现的是:使用NVidiasNSight,您只能分析OpenCL应用程序,而不能调试它们AMD的gDEBugger当前版本仅支持ATI/AMDGPU旧版本的gDEBugger支持NVidiaGPU,但工作已于2010年12月停止GDB调试器似乎支持它,但只能在Linux下使用英特尔OpenCLSDK带有一个调试器,但它只能在CPU上运行代码时工作,而不是在GPU上运行代码时工作这种配置(Windows+NVidiaGPU+Op

c++ - 如何在 Linux 中调试正在运行的 C++ 程序?

我有一个关于在Linux中调试正在运行的C++程序的问题。如果一个程序已经在运行并且不能被中断,那该怎么做。我可以找到三种方法,但我不太了解细节,如果有人能更深入地阐述,我将不胜感激。1)我们可以通过指定进程ID来使用GDBgdb-pPID在这种情况下,这和attachPID有什么区别?2)我们可以使用pstat,但是,我使用的是Ubuntu,没有pstat,只有mpstatmpstat好像没有提供太多信息,也没有那么多选项。3)查看./proc目录下的详细信息在这种情况下,只需转到具有PID的目录即可。但是,这应该手动完成吗? 最佳答案

c++ - visual studio 2010 c++调试符号已加载但找不到源代码

我在2010年内指定了符号(pdb)文件,以便正确加载它,但我得到了Nosourceavailable错误并且BrowsetoFindSourceCode是变灰了。有谁知道我如何指定源代码目录或查看pdb内部以找出它在哪里?编辑:我的DLL正在被外部程序调用。错误发生在我的DLL中,所以我有源代码。发生错误时,我单击“调试”,加载了pdb符号,但未加载源代码。 最佳答案 如果您将DLL从其构建目录中移出,则调试器不太可能自行找到源代码文件。您可以做的第一件事是在“解决方案资源管理器”窗口中右键单击“解决方案根节点”,“属性”、“通用

c++ - 附加调试器时 unique_ptr dtor 调用速度慢得离谱 (msvc)

structtest_struct{test_struct(){}~test_struct(){}};#include#include#includeintmain(){printf("ctorbegin\n");{std::vector>test_vec;constintcount=100000;for(autoi=0;i我正在使用VS2010,发现了一些荒谬的性能问题。上面的代码在调试和发布版本(ctrl+f5)中都运行良好,但是当附加调试器(f5)时,dtor调用unique_ptr类的速度慢得无法忍受。结果机器代码是相当优化的,所以我不认为这是编译器问题而不是调试器问题,但我不