MSVC 2008,调试过程,无法调试

Posted

技术标签:

【中文标题】MSVC 2008,调试过程,无法调试【英文标题】:MSVC 2008, debugging process, can't debug 【发布时间】:2018-07-17 05:35:41 【问题描述】:

我已经在这个项目上工作了一段时间,它是一个旧版 DLL,我的职责是使其适应新版本的库。

我在 Properties / C/C++ / Preprocessor / Preprocessor Definitions 中定义的构建中添加了一个定义

我添加的定义称为 CLSOPENLDV,行如下所示:

    CLSOPENLDV;SP_DEBUG;WIN32;_WINDOWS;_USRDLL;

这用于工作,在我的代码中我使用定义来测试和切换代码:

    #pragma once

    #if defined(CLSOPENLDV) && !defined(CLSOPENLDV_H)
        #define CLSOPENLDV_H
        #pragma comment(lib, "ldv32")
        ...
    #endif

这一切都可以正常工作,上周我不得不切换回原始版本,这是从属性中删除常量的简单案例,但是现在我想回到原来的位置,出于某种原因我可以't,即使常量回到属性中,预处理器也没有被构建识别,代码在上面的#if定义测试中是灰色的,我真的不知道为什么?

可能与预编译的头文件(pch)有关吗?

[编辑] 实际上问题不是 CLSOPENLDV 独有的,其他定义 SP_DEBUG 也没有通过构建,并且此定义包含的任何调试语句都未启用。

[Edit2] 我已经在调试器中设置了断点,但它也没有达到这些断点,这一切都在工作,但从根本上来说,它被破坏或禁用了。

[Edit3] 这是一个比我最初认为的更根本的问题,我根本无法调试项目...我附加到进程,但我的断点都没有被命中。我在“输出”窗格中看到很多首次更改异常,但不知道在哪里查看,因为它只是提供地址。

[Edit4] 仍在试图弄清楚发生了什么,下面是运行 DLL 时的转储,我所做的唯一修改是调试 / 异常 / C++ 异常,我选中了抛出复选框,所以它现在停止第一个异常的异常对话框:

“Edwards.Scada.AgentService.exe”:已加载“C:\Program Files\Edwards\Agent Service\Edwards.Scada.AgentService.exe”,二进制文件未使用调试信息构建。 “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\ntdll.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\mscoree.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\kernel32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\KernelBase.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\apphelp.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\apppatch\AcLayers.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\msvcrt.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\user32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\gdi32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\shell32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\cfgmgr32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\windows.storage.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\combase.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\rpcrt4.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\bcryptprimitives.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\advapi32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\sechost.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\shlwapi.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\kernel.appcore.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\SHCore.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\powrprof.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\profapi.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\oleaut32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\setupapi.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\mpr.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\sfc.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\winspool.drv” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\bcrypt.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\sfc_os.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\version.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\msvcr120_clr0400.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\6457de2c799b00351885b50b15ee8582\mscorlib.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\ole32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System\d07dc4c7e25d0f1f688e96c3651ccbe3\System.ni.dll” 'Edwards.Scada.AgentService.exe':已加载'C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Serv759bfb78#\a8b2254177d41e0ba6c21c1620ad7d05\System.ServiceProcess.ni.dll' “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\cryptsp.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\rsaenh.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\cryptbase.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Core\c3edb3947295bb8762d800c029930c15\System.Core.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Configuration\2817463703ac432e3bbf54586b3d6b8b\System.Configuration.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Xml\9d354ba04e2414d763e9dea657f52fff\System.Xml.ni.dll” 线程“Win32 线程”(0x2084) 已退出,代码为 0 (0x0)。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x4890000”,未加载符号。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x48b0000”,未加载符号。 “Edwards.Scada.AgentService.exe”:已卸载“ImageAtBase0x4890000” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Data\e6902bef5b9f4110e975dc92ff87e71d\System.Data.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\Microsoft.NET\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\ws2_32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\crypt32.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\msasn1.dll” Edwards.Scada.AgentService.exe 中 0x015e401a 处的第一次机会异常:0xC0000005:访问冲突读取位置 0x00000000。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x4950000”,未加载符号。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x4960000”,未加载符号。 “Edwards.Scada.AgentService.exe”:已卸载“ImageAtBase0x4950000” 线程“Win32 线程”(0x25d4) 已退出,代码为 0 (0x0)。 线程“Win32 线程”(0x13d0) 已退出,代码为 0 (0x0)。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x50a0000”,未加载任何符号。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x50f0000”,未加载任何符号。 “Edwards.Scada.AgentService.exe”:已卸载“ImageAtBase0x50a0000” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.ServiceModel\dab9738fa2ffd706ad918f4854011580\System.ServiceModel.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Runt73a1fc9d#\0003c5ec8500bfe2571ef6b3768e3327\System.Runtime.Remoting.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\mswsock.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\NapiNSP.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\pnrpnsp.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\nlaapi.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\winrnr.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\dnsapi.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\nsi.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\rasadhlp.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\IPHLPAPI.DLL” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\FWPUCLNT.DLL” “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x4970000”,未加载符号。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x50e0000”,未加载符号。 “Edwards.Scada.AgentService.exe”:已卸载“ImageAtBase0x4970000” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\SMDiagnostics\5415baffc9d9111d58c8fe05d4e50c8a\SMDiagnostics.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Servd1dec626#\71634b20929e9a6ed53d7acbffa0b93d\System.ServiceModel.Internals.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x4970000”,未加载符号。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x5220000”,未加载任何符号。 “Edwards.Scada.AgentService.exe”:已卸载“ImageAtBase0x4970000” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Runteb92aa12#\dd6060246740eddfed31aeed179fb81f\System.Runtime.Serialization.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Web.Services\1150e9c52ad5088258dafbd0fce2ae07\System.Web.Services.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x5230000”,未加载符号。 “Edwards.Scada.AgentService.exe”:已加载“ImageAtBase0x5280000”,未加载任何符号。 “Edwards.Scada.AgentService.exe”:已卸载“ImageAtBase0x5230000” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Serv14259fd9#\f8ae5cc80236c0593f67d76495fccd46\System.ServiceModel.Activities.ni.dll” Edwards.Scada.AgentService.exe 中 0x74372ea2 处的第一次机会异常:0xE0434352:0xe0434352。 “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.IdentityModel\43572b8748b627fcbeb032b3656f5810\System.IdentityModel.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Net.Http\f37829993e81bb8c2121b954fda8e480\System.Net.Http.ni.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\httpapi.dll” “Edwards.Scada.AgentService.exe”:已加载“C:\Windows\System32\psapi.dll” Edwards.Scada.AgentService.exe 中 0x74372ea2 处的第一次机会异常:Microsoft C++ 异常:内存位置 0x053dc524 处的 EEFileLoadException..

第一行很混乱,我已经检查了几次项目构建,它是为调试而构建的。

[另一个编辑] 我已经从 SVN 获取了昨天工作的项目,并完全删除了现有项目,从 SVN 中提取了副本。我已经编译并测试了它,它现在崩溃了,就像昨天它工作的那样,我重新安装了 MSVC,安装了服务包并建立了一个工作项目,但现在它没有调试和崩溃。

为什么? 我还能尝试什么?

这是stdafx.h的内容:

#include "stdafx.h"

#ifdef _ATL_STATIC_REGISTRY
    #include <statreg.h>
    #include <statreg.cpp>
#endif

#include <atlimpl.cpp>

这是来自 C/C++ 的命令行:

    /Od 
    /I "..\..\..\Legacy Common Files" 
    /I "..\nodetalk2\include"
    /I "..\..\..\..\..\Include" 
    /D "CLSOPENLDV"
    /D "SP_DEBUG"
    /D "WIN32"
    /D "_WINDOWS"
    /D "_USRDLL"
    /D "_VC80_UPGRADE=0x0600"
    /D "_WINDLL" 
    /D "_MBCS"
    /FD /EHsc /MDd /Yc"stdafx.h" 
    /Fp".\Debug/FsLonPlayer.pch"
    /Fo".\Debug/" 
    /Fd".\Debug/" 
    /W4 /nologo /c /Wp64 /Zi /TP /errorReport:prompt

[编辑] 输出的最上面一行是一条红鲱鱼,它实际上是指这个DLL所属的EXE,该DLL是为调试而编译的,但是说它仍然没有解释为什么昨天它正在工作,我可以在调试器中看到源代码并在断点处停止,今天我不能。

【问题讨论】:

这可能与预编译的头文件(pch)有关吗?似乎不太可能,但要测试这个理论,只需在您的项目中关闭 pch。 @john,我希望事情就这么简单,由于 pch 关闭时出现大量构建错误,因此需要对源代码进行很多更改。 听起来像是一个结构很糟糕的项目。如果实施得当,pch 应该是透明的。也许你真正的问题就在那里。 这个项目已经十多年了,我参与它是最近3个月,它就是这样...... 当然可以,但是如果你解决了pch的问题,那么你可以随意打开和关闭它,那么这个问题可能也会消失。无论如何,当我看不到项目时,很难给出建议。 【参考方案1】:

需要将此移至格式的答案。我认为@ZDF 建议您替换该行:

#if defined(CLSOPENLDV) && !defined(CLSOPENLDV_H)

#if defined(CLSOPENLDV)

虽然我在这里,但下一个建议可能不是一个长期的解决方案,但它应该提供一个数据点来帮助找出问题所在。创建一个新的头文件,其中只有这一行:

#define CLSOPENLDV

不要使用#include 将其包含在任何地方,而是打开项目属性,进入C/C++ -> Advanced 并在Forced Include File 字段中输入新头文件的完整路径。试一试,看看会发生什么。

另外,另一个(可能是愚蠢的)想法。您能否像一周半前那样从您的 SCM 存储库中提取项目文件的版本?

-- 编辑--

刚刚看到您对原始帖子的修改。您是否检查了实际.cpp 文件的属性,您可以通过查看项目本身的属性、验证两个定义是否存在,然后只需在解决方案资源管理器中单击.cpp 文件即可轻松完成此操作。这会将您带到文件本身的相同属性页。

我非常想知道那里展示了什么。

【讨论】:

我真的不和你在一起,改变#if定义的条件没有帮助,块内的代码仍然是灰色的,这告诉我由于某种原因定义“CLSOPENLDV”不是没有通过。 @SPlatten 智能感知并不总是正常工作。你必须编译。 @ZDF,这就是我正在做的事情。 @SPlatten 即使失败了,它也是一个有用的数据点。我们现在可以确定 CLSOPENLDV 已经去了 M.I.A. 这太令人沮丧了,我收到了 C 库中不属于我的构建的文件的错误:错误 C2857: '#include' statement specified with the /Ycstdafx.h 命令行选项在源文件中找不到。【参考方案2】:

这个项目非常大,构建中有多个子项目,结果发现构建中的其他项目之一导致我的项目出现问题。从 SVN 中检查了一个更老的树并构建了它,我们现在可以找出有问题的项目在哪里并进行修复。

【讨论】:

以上是关于MSVC 2008,调试过程,无法调试的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 2008 Management Studio 中调试时查询存储过程中的临时表

我的vs2008英文版不能调试JS了,请高手赐教,实现调试JS的过程,英文版。。。如何设置?

Sql Server 2012 存储过程的调试

调试存储过程时如何执行sql查询

【安卓开发】在进行调试的过程中,发现在xml中明明有注册的控件却无法在模拟器中显示出来.....

安装 Qt 5.6.1 MSVC 2015 更新 3