- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这个问题可能有点尴尬,但这是我的详细问题:
目前我正在考虑设置 SysInternals' procdump.exe监控我们的应用程序表现出虚假消失——也就是说,用户报告说应用程序窗口在短暂可见的挂起后就“消失”了,没有任何痕迹。
我的第一个想法是运行 procdump -e -x 。 MyApp.exe
会在应用程序遇到未处理的异常时记录故障转储,但后来我看到还有一个 -t
开关,即 --
-t - Write a dump when the process terminates.
当进程终止时自动生成转储。
我已经通过在我可以触发它的定义位置插入 ExitProcess
或 TerminateProcess
调用来测试 -t 开关。
虽然应用程序按预期运行,即 TerminateProcess
立即“杀死”正在运行的应用程序并且 ExitProcess
需要一段时间,因为运行全局清理,以这种方式生成的转储是在两种情况下都没有用。
我为 -t
获取的转储总是只包含一个线程(应用程序在终止时运行超过 20 个线程)并且调用堆栈甚至不在有用的位置。 (它似乎只是来自已终止应用程序的一个随机线程。)
我做错了什么吗?我能否有效地使用 procdump -t
来追踪进程退出函数的意外调用?
最佳答案
Can I usefully use procdump -t to track down unexpected calls of process exit functions at all?
我认为不是,原因如下:测试进程calc.exe
CommandLine: "C:\Program Files\Sysinternals\procdump.exe" -t calc.exe
我尽量谨慎地暗示 procdump 正在等待 calc.exe 进程句柄。
0:000> kb
ChildEBP RetAddr Args to Child
0017f2e0 77135e6c 75336872 00000002 0017f334 ntdll!KiFastSystemCallRet
0017f2e4 75336872 00000002 0017f334 00000001 ntdll!NtWaitForMultipleObjects+0xc
0017f380 76cbf14a 0017f334 0017f3a8 00000000 KERNELBASE!WaitForMultipleObjectsEx+0x100
0017f3c8 76cbf2c2 00000002 7ffdb000 00000000 kernel32!WaitForMultipleObjectsExImplementation+0xe0
0017f3e4 011c6135 00000002 0017f46c 00000000 kernel32!WaitForMultipleObjects+0x18
WARNING: Stack unwind information not available. Following frames may be wrong.
0017fc30 011c999e 00000003 013d1de0 013d1e78 procdump+0x6135
0017fc78 76cc1194 7ffdb000 0017fcc4 7714b495 procdump+0x999e
0017fc84 7714b495 7ffdb000 77ad79b5 00000000 kernel32!BaseThreadInitThunk+0xe
0017fcc4 7714b468 011c99f5 7ffdb000 00000000 ntdll!__RtlUserThreadStart+0x70
0017fcdc 00000000 011c99f5 7ffdb000 00000000 ntdll!_RtlUserThreadStart+0x1b
0:000> dd 17f46c
0017f46c 00000238 00000268
0:000> !handle 238 f
Handle 238
Type Process
Attributes 0
GrantedAccess 0x1fffff:
Delete,ReadControl,WriteDac,WriteOwner,Synch
Terminate,CreateThread,,VMOp,VMRead,VMWrite,DupHandle,CreateProcess,SetQuota,SetInfo,QueryInfo,SetPort
HandleCount 5
PointerCount 52
Name <none>
Object Specific Information
Process Id 1580
Parent Process 2476
Base Priority 8
在崩溃转储文件中,在进程结束之前获取堆栈最后一个完整进程线程 (TID 3136)。
0:000> ~
. 0 Id: dc8.c40 Suspend: -1 Teb: 7ffdd000 Unfrozen
0:000> .formats c40
Evaluate expression:
Hex: 00000c40
Decimal: 3136
故障转储文件是在最后一个线程完成之后、进程结束之前创建的。
关于windows - 如何使用 procdump -t -- 在进程终止时转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14319822/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!