欢迎光临 高端调试
登录
|
注册
|
FAQ
搜索论坛
内核调试
ACPI调试
Linux内核调试
Windows内核调试
调试方法学
调试战役
调试原理
新工具观察
操作系统
Linux
Windows Vista
Windows
驱动开发
Linux驱动
WDF
WDM
总线
PCI Express
PCI/PCI-X
USB
无线通信协议
中央处理器
64位CPU
ARM
IA-32
CPU Info Center
计算机机系统
ACPI标准
系统认证
Desktop
服务器
嵌入式系统
Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
特别链接
格蠹调试套件(GDK)
格蠹学院
小朱书店
老雷的微博
《软件调试》
《格蠹汇编》
《软件调试(第二版)》
沪ICP备11027180号-1
C/C++本地代码调试
帖子发起人:
dabang
发起时间:
2009-08-17 13:15 下午
回复:
4
高端调试
»
软件调试
»
C/C++本地代码调试
»
Re: 请教大家个问题
搜索论坛
帖子排序:
Oldest to newest
Newest to oldest
2009-08-17, 13:15 下午
dabang
注册: 2009-08-17
发 贴: 3
请教大家个问题
最近在调试一个界面程序时发现,程序退出后,进程仍然存在。用windbg附加到该进程后,发现所有现有的线程的堆栈的最高层都是KiFastSystemCallRet,这个函数不是线程退出时的函数么?为什么执行到这个函数后,进程会不退出呢?
BTW:如果对于那些关闭了界面(窗口之类的全关闭了),但是进程仍然存在的原因是什么啊?
提前感谢大家的回复。
IP 地址: 已记录
报告
2009-08-17, 21:37 下午
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
Re: 请教大家个问题
当一个线程调用系统服务而进入到内核态执行时,用户态的程序指针所指向的就是KiFastSystemCallRet,因为从用户态的角度来看,一回到用户态,执行的就是个地方。
所以楼主描述的情况是比较典型的挂在内核态,也就是你的线程在调用系统服务时没有返回,如果不返回,那么进程就不能退出,而且这样的进程无法杀掉,就是通常所谓的杀不掉的进程。
如果要想知道原因,那么看栈回溯,看调用的那个系统服务,而后要想知道为什么不返回,那么要看内核态了,使用本地内核调试、或者看内核转储。
IP 地址: 已记录
报告
2009-08-18, 21:27 下午
dabang
注册: 2009-08-17
发 贴: 3
Re: 请教大家个问题
感谢张老师的答复。
从调用堆栈上看没有调用系统服务啊,而且该进程可以被procexp杀死,好像也可以用windows自带的任务管理器来杀掉。
IP 地址: 已记录
报告
2009-08-18, 21:51 下午
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
Re: 请教大家个问题
不客气,不妨将栈回溯贴上来看一下。
IP 地址: 已记录
报告
2009-08-19, 14:10 下午
dabang
注册: 2009-08-17
发 贴: 3
Re: 请教大家个问题
张老师:
下面是使用!analyze -v分析的该dump文件:
==============================================
FAULTING_IP:
+2d3952f0280df74
00000000 ?? ???
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
FAULTING_THREAD: 00001244
DEFAULT_BUCKET_ID: HEAP_CORRUPTION
PROCESS_NAME: SoftDA.exe
FAULTING_MODULE: 7c930000 ntdll
DEBUG_FLR_IMAGE_TIMESTAMP: 0
ERROR_CODE: (NTSTATUS) 0x80000003 - { }
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) -
ADDITIONAL_DEBUG_TEXT:
Use '!findthebuild' command to search for the target build information.
If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols. ; Enable Pageheap/AutoVerifer
PRIMARY_PROBLEM_CLASS: HEAP_CORRUPTION
BUGCHECK_STR: APPLICATION_FAULT_HEAP_CORRUPTION_WRONG_SYMBOLS
LAST_CONTROL_TRANSFER: from 7c96d281 to 7c9585ec
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
0179f844 7c96d281 0000028c 00000004 7c88b7c0 ntdll!KiFastSystemCallRet
0179f864 7c822372 7c88b7c0 04e00000 05573ad8 ntdll!RtlLockHeap+0x25c
0179fa98 04e5ae77 04d976f4 04e53927 00000001 kernel32!SetEvent+0x61
0179fae0 04e53b41 00000000 00000000 00000001 YLUSBTEL!YL_DeviceIoControl+0x4d087
0179fb08 04e4feae 04e00000 00000000 00000000 YLUSBTEL!YL_DeviceIoControl+0x45d51
0179fb48 04e4ff18 04e00000 7c94a352 04e00000 YLUSBTEL!YL_DeviceIoControl+0x420be
0179fb70 7c969dee 04e4fefb 04e00000 00000000 YLUSBTEL!YL_DeviceIoControl+0x42128
0179fc84 7c82b1bb 04370000 0179fdb0 0179fea0 ntdll!RtlOpenCurrentUser+0x168
0179fc98 774d1d0f 04370000 0179fec4 774d1d23 kernel32!FreeLibrary+0x1a
0179fca4 774d1d23 0179fdbc 00000000 775d65b0 ole32!CreateErrorInfo+0x11d0
0179fec4 774fb97d ffffffff 0004fe60 00072a94 ole32!CreateErrorInfo+0x11e4
0179fed4 7750249c ffffffff 00000000 008fea6f ole32!CoFreeUnusedLibrariesEx+0x2e
0179fee0 008fea6f 00072a94 008fea8d 00000000 ole32!CoFreeUnusedLibraries+0x9
00000000 00000000 00000000 00000000 00000000 SoftDA+0x4fea6f
SYMBOL_NAME: heap_corruption!heap_corruption
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: heap_corruption
IMAGE_NAME: heap_corruption
STACK_COMMAND: .cxr 00000000 ; kb ; ~0s; .ecxr ; kb
FAILURE_BUCKET_ID: HEAP_CORRUPTION_80000003_heap_corruption!heap_corruption
BUCKET_ID: APPLICATION_FAULT_HEAP_CORRUPTION_WRONG_SYMBOLS_heap_corruption!heap_corruption
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/SoftDA_exe/1_2_5_3/4a80d148/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1
Followup: MachineOwner
=================================================
看样子是堆分配错误,但是看不到哪里有问题
IP 地址: 已记录
报告
高端调试
»
软件调试
»
C/C++本地代码调试
»
Re: 请教大家个问题
请选择
论坛首页
|- 论坛搜索
|- 热门主题
|- 未回复的主题
用户选项
|- 登录
|- 注册
|- 找回密码
软件调试
|- Windows内核调试
|- C/C++本地代码调试
|- .Net程序调试
|- 脚本程序调试
|- Java程序调试
|- Linux内核调试
|- 《程序员》杂志调试专栏
|- WinDbg
|- GDB
|- 远程调试
|- 调试ACPI和BIOS
|- 特殊的调试任务
|- 转储分析
|- GDK7
内核探秘
|- Windows内核
|- Linux内核
系统架构
|- CPU架构
|- PCI/PCI Express架构
程序人生
|- 软件物语
|- 社区活动
|- 名人逸事
联盟论坛
|- 欢迎使用CnForums
没有银弹
|- BUG也精彩
|- 豆腐工程
|- 软件圈里十大怪
Windows Vista
|- 用调试利剑剖析VISTA内幕
|- 老专家如何破解新问题
|- 我的电脑谁说了算?
|- 资源
Office开发
|- Visio
驱动程序开发
|- Windows驱动开发
|- Linux驱动开发
|- Windows CE驱动开发
用户态开发
|- Windows本地代码(native)高级开发
|- Web应用开发
|- WinFX和.Net
|- Office开发
本站建设
|- 高端调试团队
|- 版面布局
|- 活动建议
|- 网站维护
64位计算
|- 64-bit Windows
|- 64-bit CPU
图书
|- 《软件调试》的示例程序
|- 《软件调试》的工具
|- 《软件调试》书友
|- 《软件调试》答疑
|- 《软件调试》勘误和意见
|- 《格蠹汇编》
|- 《软件调试》第二版卷1
|- 《软件调试》第二版卷2
云计算
|- IaaS
|- 云存储
|- 大数据
|- PaaS和SaaS
GPU
|- CUDA
|- OpenCL
|- HSA
|- 游戏开发与调试
(C)2004-2020 ADVDBG.ORG All Rights Reserved.