草庐IT

bug调试

全部标签

c++ - "Unable to start program"(调试版本)

MicrosoftVisualStudioUnabletostartprogram'theprogram.exe'.Thisapplicationhasfailedtostartbecausetheapplicationconfigurationisincorrect.Reviewthemanifestfileforpossibleerrors.Reinstallingtheapplicationmayfixthisproblem.Formoredetails,pleaseseetheapplicationeventlog.OK问题程序是一个C++项目,没有MFC,没有AFX,使用的库

c++ - 如何在执行期间停止 C++ 应用程序以调试到 dll?

我有一个我没有代码的应用程序和一个我有代码的dll。我需要能够调试到dll,但缺少exe的源代码,我该怎么做?dll代码为mfcc++;我相信主应用程序也是一样。我试过做一个“设置目标应用程序”的交易,我在其中设置将从中调用dll的应用程序,当以这种方式调用时,应用程序崩溃了,非常可怕。我不知道问题出在这个dll上还是出在该行为的可执行文件上,这只是我想解决的无数问题之一。我在想,应该有一些调用允许dll无限期地旋转,直到调试器附加到进程,此时我应该能够通过附加到进程来调试dll。那有意义吗?有更好的方法吗? 最佳答案 我曾经使用D

VSCode/bugs/如何给VSCode降级

首先在VSCODE设置内搜索update将updatemode更改为none(如图)上vscode官网(code.visualstudio.com/updates)下载需要的版本(如图)下载完毕后直接安装会自动覆盖以前版本的完毕

c++ - 如何在 C++ 编译期间去除调试代码?

假设我有一个C++函数debugPrint(intfoo)。我怎样才能最方便地从发布版本中删除它?我不想用#ifdefs包围对debugPrint的每次调用,因为这真的很耗时。另一方面,我想100%确定编译器会从发布版本中删除对该函数的所有调用以及函数本身。如果使用函数调用产生的参数调用它,剥离也应该发生。例如,debugPrint(getFoo());。在那种情况下,我还希望删除getFoo()调用。我了解函数内联可能是一种选择,但不保证内联受到支持。 最佳答案 使用条件编译和宏:#ifdef_DEBUG#defineLOG(x)

c++ - 关于调试,多线程的面试题

我昨天有电话面试问题。面试官问我是否遇到过任何具有挑战性的调试问题?我告诉他我曾经在调试别人的代码时遇到过问题,我花了3-4天的时间才解决这个问题。我使用Windbg、符号和故障转储来解决问题。现在这足以说明问题了吗?面试官期望什么?我不知道还能说些什么,我很久以前就遇到过这个问题,无法解释所有细节......这个问题很常见,我不确定正确答案是什么?还有一个很常见的问题:您是否处理过多线程应用程序?你怎么能找出死锁?答:要找到死锁,我们可以查看内存中进程的快照,并查看正在等待的线程。那么下一个问题:如何避免死锁?使用waitformultipleobjects维护关键部分的顺序你们怎么

c++ - 如何调试加载共享库

我有一个使用uclibc在MIPSCPU上运行的多进程程序,它是用gcc4.5.3编译的。其中一个过程(名称为“tv”)需要链接到一个共享库(libtest.so),该库也是我编写的。“tv”进程是用C++编写的,而libtest.so是用C编写的。我还从libtest.so转储了elfheader,它同时设置了PIC和CPIcflags,所以我认为创建库是可以的。当我尝试运行该程序时,除“tv”进程外,所有进程都正常启动。没有错误信息。当我使用ps检查它的状态时,它已经变成了一个僵尸进程。我试过以下方法如果我从链接进程中删除libtest.so,并删除对libtest.so的所有引用

c++ - cout 和 printf 适用于内置调试未发布的 Dll

我构建了一个DLL,它通常通过SetWindowHookEx注入(inject)到控制台应用程序中。DLL将信息输出到控制台很重要,我一直在使用std::cout进行操作。DLL接近完成,直到我尝试在Release模式下构建DLL,这使得所有cout行都变得无用。我已经通过执行导致程序在dllmain函数中崩溃的简单空取消引用来验证DLL正在注入(inject)和执行。与std::printf相同。voidonAttach(){//WARNINGTHISISADEMONSTRATIONstd::cout我真的不知道如何解决这个问题。发布链接器是否以某种方式排除了依赖项?我正在使用MSV

c++ - 如果使用调试信息编译,则通过名称获取全局变量地址

如果我使用打开了-g和/或-ggdb的gcc编译一些C/C++程序,那么如果我使用gdb启动程序,我可以在gdb中打印变量值。我的问题是,如果没有gdb,我可以从程序内部实现同样的事情吗?在运行时,给定变量的名称(表示为运行时字符串),是否可以读取调试信息,然后获取变量的地址以及类型信息?谢谢。 最佳答案 map文件怎么样?它将包含所有全局变量及其地址的信息。您所要做的就是解析映射文件并获取变量的地址(Python可以提供帮助)。在您的程序中编写一个小例程来接受地址和返回值。如果您将它用于类似目的的日志记录,您可以使用新线程通过套接

使用NPM/节点检查Android手机上的USB调试

我正在尝试检查USB调试是否打开还是关闭NPM/节点。一旦将Android手机连接到我的系统并关闭USB调试,我就需要向用户显示提示以启用USB在他的手机上调试。根据我的研究,连接到我的系统的每个设备(扫描仪/电话/USB)都有一个独特的指导这有助于我区分哪种设备已连接。此外,我无法获取USB调试细节。请帮忙!到目前为止,我撰写的代码是基于Iserialnumber,但我想根据Bus-TypeGuid进行区分。varusb=require('usb');usb.on('attach',function(device){vardevices=usb.getDeviceList();varchec

c++ - QMYSQL 驱动程序未在发行版中加载,正在调试中工作

我目前正在开发Qt5应用程序,该应用程序涉及将mysql数据库与QMYSQL一起使用。它在调试session期间就像一个魅力,但是当我在发布时编译它时,我得到错误:Drivernotloaded.Drivernotloaded.(是的,它实际上出现了两次)。我已经试过包括所有DLL,像这样:但这根本不起作用,我尝试调整qmake选项,但没有任何效果。有没有我不知道的把戏?注意:我使用的MySQL驱动是我自己编译的。 最佳答案 首先,您可能不应该在您的发行版中包含任何以“d”结尾的库。“d”表示调试,当您在调试中编译时,Qt会使用它们