windbg 定位正确UnhandledExceptionFilter 调用时堆栈

某些情况下,当程序崩溃时异常没有被程序捕获,就会出现UnhandledExceptionFilter这种情况,会弹出下图的系统错误弹窗
在这里插入图片描述
遇到此错误时,手动获取问题进程的dump文件,您可以按照本文来标识导致异常的 DLL 中的步骤

堆栈中有UnhandledExceptionFilter的情况

1.在 Windbg.exe,打开.dmp 文件的进程,并配置符号路径
2.在命令提示符下键入~ * kb列出所有进程中的线程
3.找到有函数调用的线程 Kernel32! UnhandledExceptionFilter,并切换到这个线程查看堆栈

 # ChildEBP RetAddr  Args to Child              
00 04abe580 76d84bf3 00000000 00000000 00000000 win32u!NtUserWaitMessage+0xc (FPO: [0,0,0])
WARNING: Stack unwind information not available. Following frames may be wrong.
01 04abe5c0 76d84ae4 00000000 00000000 00000000 user32+0x24bf3
02 04abe5f0 76de229b 00000000 76de0690 04abe830 user32+0x24ae4
03 04abe6bc 76de1031 04abe830 0a621d90 00000000 user32+0x8229b
04 04abe818 76de1af7 0a621d90 07f69368 00000000 user32+0x81031
05 04abe8a4 76de192e 00000000 0a621d90 07f69368 user32+0x81af7
06 04abe8d8 76de1645 00000000 00aade00 00a9b590 user32+0x8192e
07 04abe8f8 00a8f543 00000000 00aade00 00a9b590 user32+0x81645
08 04abe930 00a80b41 00aade00 00a9b590 00012010 xxx进程!__crtMessageBoxA+0x160 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt_bld\self_x86\crt\src\crtmbox.c @ 158] 
09 04abe958 00a7a9fc 0000000a 00000000 77615c10 xxx进程!_NMSG_WRITE+0x16f (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt_bld\self_x86\crt\src\crt0msg.c @ 242] 
0a 04abec90 00a834e0 21876de5 00000000 00000000 xxx进程!abort+0x26 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt_bld\self_x86\crt\src\abort.c @ 59] 
0b 04abecc0 00a8432b 04abed64 75eb2432 04abed94 xxx进程!terminate+0x33 (FPO: [Non-Fpo]) (CONV: cdecl) [f:\dd\vctools\crt_bld\self_x86\crt\prebuild\eh\hooks.cpp @ 130] 
*** WARNING: Unable to verify timestamp for KERNELBASE.dll
0c 09a8f644 77ea7e7a 09a8f66c 
### Visual Studio 调用堆栈窗口 使用教程与功能介绍 在 Visual Studio 中,调用堆栈窗口是一个非常重要的调试工具,它可以帮助开发者了解当前程序执行的位置以及函数之间的调用关系。以下是关于该窗口的功能和使用方法: #### 打开调用堆栈窗口 要打开调用堆栈窗口,可以在调试模式下通过菜单栏选择 **“调试” > “窗口” > “调用堆栈”** 来实现[^1]。 #### 主要功能 1. **显示调用层次结构**: 调用堆栈窗口会展示当前线程中的所有函数调用顺序,帮助开发者追踪到某个特定位置是如何被调用的。 2. **查看具体帧信息**: 用户可以选择某一行(即某一帧),并查看对应的局部变量、参数以及其他上下文信息。这有助于分析错误发生的根源。 3. **多线程支持**: 如果应用程序涉及多个线程,则可以切换不同的线程以观察各自的调用堆栈情况。 4. **导航能力**: 单击任意一条记录即可跳转至相应的源文件及其所在行号处,便于快速定位问题代码区域。 5. **过滤选项**: 当项目复杂度较高,可能需要隐藏某些不必要部分(如系统库内部细节),此可通过设置筛选条件来简化视图呈现效果。 当常规手段无法获取足够的诊断数据,还可以考虑借助其他高级调试工具比如 WinDbg 进一步深入探究潜在原因[^3]。 ```cpp // 示例 C++ 代码片段用于演示如何触发断点从而进入调试状态 void exampleFunction() { int a = 0; int b = 10 / a; // 此处会产生除零异常 } int main(){ exampleFunction(); } ``` 上述例子展示了简单的运行期错误场景,在实际操作过程中一旦遇到未预期行为或者崩溃现象就可以利用这些技术手段来进行排查解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值