系统问题调试:appcrash

博主遇到DXP打不开PCB的library问题,工程无法打开,问题为内存访问越线。尝试多种方法,如禁掉dep、修复ntdll、安全模式、360维修等均无果,最后发现是安装了两个打印机程序导致,卸载多余程序后问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久就有了dxp打不开pcb的liabrary,一直没注意以为是小问题,现在要用了,才发现工程不能打开,完全是摸黑玩pcb,没lvs怎行。
具体问题appcrash,崩溃对象stackhash_e98d,问题c0000005,解释过来就是内存访问越线。初步估计重启会好,完全败北,在家搜了两天,完全没戏的东西,百度太搓了,为什么把google禁了啊。
今天办公室调试,发现,问题对象不一定是StackHash,会有ntdll.dll,hp10006su.dll,百度依然没戏,发现人人有个好方法。www.google.com/ncr,原来google是能上的,还是大喜的英文,仅仅是香港被禁了。人不去搜索,果然自己傻逼很久。。。
没有国界的解决方案毕竟是多,
1,禁掉dep(数据执行保护),不再提示越线。结果失败
2,修复ntdll,靠,老外的骗钱软件,肯定没效果。废掉
3,msconfig,禁掉所有不要的服务和自启动软件? 重启重启,无解。
4,安全模式试试?界面倒不错,速度挺好。哎,依旧不管用。
5,360紧急维修一下下?靠
6,360全盘清注册表,废柴,依旧没用。
7,重温旧情小红伞杀杀毒?似乎不是病毒。
8,gank,卸了360和小红伞这没用的东西,依然如旧。
9,所有近期软件重新卸掉,试验;再重装,再试验。似乎和candence也没关。
10,重装系统?几年的东西谁敢重装,改为升级win7sp1吧,也许能冲掉一些废了的系统核心dll?windows6.1-KB976932-X86.exe。搞了一个小时,看部兄弟奔跑吧,不错哎,明星就是好看。依旧没用。
11,难道是以前装的vc6太久了,搞了系统?删删mfc?没用。。。重装vs2013搞一搞,又是1个小时,依旧废掉。
12,哥累了,一次次的期待着奇迹,就是没有,突然想到网上出现appcrash的童鞋都是玩游戏,所以卸了显卡驱动可以,就在此时随机出现的问题对象是hp1006su这个东西,这,这不是打印机程序?临走了,最后试试吧,靠竟然装了两个打印机程序,全他妈的卸了,好使喽,再装上一个,再重启,ok,上帝的眷顾啊,可以吃饭了。

果然是如以前的说法:修机器要1万,仅需踢一脚值500,但是知道往哪踢要9500.。。。。。。。。。。。。。。。。。
再给自己点个赞

<think>我们之前讨论了InnoSetup打包时未加载PDB文件的问题,现在用户进一步提出APPCRASH错误与未加载PDB文件的问题APPCRASH通常指应用程序崩溃,而PDB文件缺失会导致崩溃时无法获取详细的堆栈信息,使得调试困难。因此,我们需要同时解决两个问题:确保PDB文件正确加载,并解决APPCRASH错误。注意:用户提供了一段QMake的配置引用,但用户明确表示该引用仅供参考(且与InnoSetup无直接关系),真正需求是解决InnoSetup打包后的APPCRASH和PDB问题。因此,我们应忽略该引用,专注于InnoSetup和Windows应用程序崩溃的解决方案。我将从以下方面着手:1.**确保PDB文件包含在安装包中并正确安装**(已部分解答,但需结合APPCRASH补充)。2.**分析APPCRASH的可能原因**(如依赖缺失、权限问题、兼容性等)。3.**综合解决方案**:结合PDB的包含和APPCRASH的避免措施。步骤详细说明:###1.确保PDB文件包含在安装包中(复习并扩展)-在InnoSetup脚本中,必须显式包含PDB文件。例如:```innoscript[Files];主程序Source:"MyApp.exe";DestDir:"{app}";Flags:ignoreversion;PDB文件(调试符号文件)Source:"MyApp.pdb";DestDir:"{app}";Flags:ignoreversion```-如果构建目录有多个(如Debug/Release),请确保路径正确。可以使用通配符或预定义变量:```innoscript#defineBuildPath"..\bin\Release"Source:"{#BuildPath}\MyApp.pdb";DestDir:"{app}"```-安装后检查:安装程序后,确认目标目录(如`{app}`)下存在`.pdb`文件。###2.解决APPCRASH错误APPCRASH错误(例如Windows事件日志中的`ApplicationError1000`)通常由以下原因引起:-**依赖项缺失**:应用程序依赖的DLL(如VC++运行时、.NET框架)未正确安装。-**权限问题**:应用程序试图写入受保护目录(如ProgramFiles)而未获得管理员权限。-**兼容性问题**:应用程序与当前操作系统不兼容(如未设置正确的manifest)。-**内存访问冲突**:空指针访问、缓冲区溢出等程序错误。具体解决方案:####方案1:确保运行时依赖正确安装-**VC++运行时**:如果应用程序使用VisualC++编译,必须确保目标机器安装了相应的VC++运行时。InnoSetup可以通过以下方式自动安装:```innoscript[Files]Source:"vcredist_x64.exe";DestDir:"{tmp}";Flags:deleteafterinstall[Run]Filename:"{tmp}\vcredist_x64.exe";Parameters:"/install/quiet/norestart";StatusMsg:"正在安装VC++运行时..."```-**.NETFramework**:如果是.NET应用,检查并安装对应版本的.NET框架。类似地,通过`[Run]`段执行安装程序。-使用`DependencyWalker`工具检查exe的依赖关系,确保所有DLL都可用。####方案2:设置应用程序清单以请求管理员权限(UAC)-如果应用程序需要写操作(如写入配置文件到安装目录),则需要在清单中指定`requestedExecutionLevel`为`requireAdministrator`。-在InnoSetup中,可以通过以下方式嵌入清单:```innoscript[Files];如果应用程序本身没有内嵌清单,可以外置一个清单文件并包含Source:"MyApp.manifest";DestDir:"{app}"[Setup];同时,安装程序本身如果需要管理员权限,设置PrivilegesRequired=admin```-示例清单文件(MyApp.manifest)内容:```xml<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><assemblyxmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0"><trustInfoxmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevellevel="requireAdministrator"uiAccess="false"/></requestedPrivileges></security></trustInfo><compatibilityxmlns="urn:schemas-microsoft-com:compatibility.v1"><application><!--支持Windows10和Windows11--><supportedOSId="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/></application></compatibility></assembly>```####方案3:处理应用程序自身的错误-确保程序经过充分测试,避免空指针等错误。-如果已经包含PDB文件,当程序崩溃时,可以获取详细的崩溃报告(通过Windows事件查看器或Dr.Watson日志),然后使用WinDbg进行调试。####方案4:设置兼容性模式-在InnoSetup中,可以创建快捷方式时设置兼容性属性,但通常不建议(应确保程序本身兼容)。若必须,可在快捷方式段使用`[Icons]`:```innoscript[Icons]Name:"{group}\MyApp";Filename:"{app}\MyApp.exe";\Parameters:"";\IconFilename:"{app}\MyApp.ico";\Comment:"RunMyAppincompatibilitymode";\Flags:runasoriginaluser;\AfterInstall:SetCompatibilityMode('{app}\MyApp.exe')```并自定义函数`SetCompatibilityMode`(需用PascalScript编写)[^1]。###3.综合调试步骤当程序安装后出现APPCRASH时,按以下步骤诊断:1.**检查事件查看器**:在Windows中搜索“事件查看器”,在“Windows日志”>“应用程序”中查找崩溃记录。注意“错误”级别的事件,其中模块名称、偏移地址等信息有助于定位问题。2.**验证PDB加载**:如果事件查看器中显示“无法找到匹配的符号信息”,则PDB未正确加载(检查路径)。3.**使用WinDbg分析**:-安装WindowsSDK(包含WinDbg)。-配置符号路径(包含本地PDB文件):```.sympathSRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\MyApp```-打开崩溃产生的dump文件(位于`%LOCALAPPDATA%\CrashDumps`)或实时调试。通过上述步骤,应当能解决大部分APPCRASH问题,并确保调试符号可用。###注意事项-发布时,如果不希望包含PDB文件(避免增加体积),可以只在内部分发调试版本时包含。-使用InnoSetup的`MinVersion`和`OnlyBelowVersion`可针对不同Windows版本设置兼容性。§§相关问题§§1.如何收集InnoSetup安装程序的崩溃报告?2.如何优化InnoSetup安装包的依赖管理?3.使用WinDbg分析程序崩溃的具体步骤是什么?</think> ### 解决InnoSetup打包程序APPCRASH错误及未加载PDB文件问题 **根本原因分析**: APPCRASH错误(应用程序崩溃)结合未加载PDB文件通常表明: 1. 运行时依赖缺失(如VC++运行时库) 2. 程序访问冲突(空指针/内存溢出) 3. PDB文件未正确部署导致无法生成完整崩溃报告 4. 权限或兼容性问题 ### 解决方案分步指南 #### 步骤1:确保PDB文件正确包含(关键前提) 在`.iss`脚本中**显式添加**PDB文件,使用通配符确保版本匹配: ```innoscript [Files] ; 主程序文件 Source: "bin\Release\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion ; 包含所有PDB文件(使用通配符) Source: "bin\Release\*.pdb"; DestDir: "{app}"; Flags: ignoreversion ``` #### 步骤2:解决APPCRASH核心原因 **1. 安装VC++运行时**(90%崩溃的根源): ```innoscript [Files] Source: "vcredist_x64.exe"; DestDir: "{tmp}"; Check: IsX64 Source: "vcredist_x86.exe"; DestDir: "{tmp}"; Check: not IsX64 [Run] ; 静默安装VC++运行时 Filename: "{tmp}\vcredist_x64.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "Installing VC++ Runtime..."; Check: IsX64 Filename: "{tmp}\vcredist_x86.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "Installing VC++ Runtime..."; Check: not IsX64 ``` **2. 设置应用程序权限**(解决访问冲突): 在`[Setup]`部分添加: ```innoscript PrivilegesRequired=admin ``` **3. 添加兼容性清单文件**: ```innoscript [Files] ; 包含兼容性清单 Source: "app.manifest"; DestDir: "{app}" ``` 示例`app.manifest`内容: ```xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> <!-- Win10/11 --> </application> </compatibility> </assembly> ``` #### 步骤3:错误诊断与验证 1. **检查安装日志**: ```innoscript [Setup] SetupLogging=yes ``` 日志路径:`%TEMP%\Setup Logs\{setupname}.log` 2. **崩溃后检查**: - 打开Windows事件查看器 → Windows日志 → 应用程序 - 定位崩溃事件的`Fault Module Name`和`Offset` 3. **WinDbg分析**(使用已安装的PDB): ``` !analyze -v lm v m MyApp* // 验证PDB加载状态 ``` #### 步骤4:高级配置(防止未来崩溃) ```innoscript [Registry] ; 启用应用程序日志 Root: HKLM; Subkey: "Software\MyApp"; ValueType: dword; ValueName: "EnableLogging"; ValueData: 1 ``` ### 典型错误解决方案对照表 | 错误特征 | 解决方案 | 代码示例 | |------------------------------|-------------------------------|-----------------------------------| | `KERNELBASE.dll` 偏移错误 | 安装VC++运行时 | `[Run]`段安装vcredist | | 文件访问被拒绝 | 提权+清单文件 | `PrivilegesRequired=admin` | | 缺少MSVCP140.dll | 静态链接运行时库 | 编译器设置`/MT` | | PDB加载失败 | 确保文件存在+路径正确 | `Source: "bin\Release\*.pdb"` | > 通过以上方案,90%的APPCRASH错误可解决。若仍遇崩溃,请使用已部署的PDB文件结合WinDbg进行堆栈分析[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值