【发布时间】:2013-05-16 09:08:01
【问题描述】:
我们有一个 .NET 应用程序。 在某些特定机器上,应用程序不再响应。但是,在任务管理器中,该应用程序被列为“活动”(而不是“无响应”)。我们还可以在任务管理器中看到该进程一直使用 10% 的处理器。 我们不知道它在做什么?
有没有办法我们可以看到正在调用什么代码或进程当前正在做什么(调用堆栈?)
编辑:显然我们不能使用远程调试器,因为机器没有通过网络连接,不支持通过互联网进行调试。 CPU-analyzer.exe 程序看起来很棒,但我们无法让它工作? 我们创建了一个转储文件并用 windb 分析它,这是输出:
.................................................WARNING: rsaenh overlaps cryptsp
.WARNING: RpcRtRemote 与 rsaenh 重叠 ......警告:WindowsCodecs 与 System_Drawing_ni 重叠 ........... .......警告:msdart 与 shfolder 重叠 ...警告:comsvcs 与 oledb32 重叠 ................警告:dhcpcsvc6 与 dhcpcsvc 重叠 ................警告:apphelp 与 GdiPlus 重叠 .........警告:winhttp 与 Faultrep 重叠 .WARNING:webio 与 comctl32_71bf0000 重叠 ...... …… wow64win!NtUserPeekMessage+0xa: 00000000`732efdea c3 ret 0:000> !analyze -v
- *
- 异常分析 *
- *
* 警告:无法验证 AppName.exe 的校验和 错误:模块加载完成,但无法为 AppName.exe 加载符号 警告:符号时间戳错误 0x4ce7c496 0x4f9235ab for GdiPlus.dll * 警告:comsvcs.dll 的符号时间戳错误 0x4a5bdf81 0x4a5bda2e
FAULTING_IP: +a7d01d0 00000000`00000000 ?? ???
EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff) 异常地址:0000000000000000 ExceptionCode:80000003(Break指令异常) 异常标志:00000000 NumberParameters: 0
FAULTING_THREAD:0000000000001678
PROCESS_NAME: AppName.exe
OVERLAPPED_MODULE:“msdart”和“shfolder”重叠的地址区域
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} 断点 已到达断点。
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - 一个或多个参数无效
MOD_LIST:
NTGLOBALFLAG:0
APPLICATION_VERIFIER_FLAGS:0
MANAGED_STACK: !dumpstack -EE 未找到导出转储堆栈
ADDITIONAL_DEBUG_TEXT:基于属性 [Is_ChosenCrashFollowupThread] 的后续集来自 Frame:[0] 线程:[PSEUDO_THREAD]
LAST_CONTROL_TRANSFER:从 00000000732cadb3 到 00000000732efdea
BUGCHECK_STR:APPLICATION_FAULT_STACKIMMUNE_NOSOS
PRIMARY_PROBLEM_CLASS:堆栈免疫
DEFAULT_BUCKET_ID:堆栈免疫
STACK_TEXT:
0000000000000000 0000000000000000 未知!AppName.exe+0x0
SYMBOL_NAME:未知!AppName.exe
FOLLOWUP_NAME:MachineOwner
MODULE_NAME:未知
IMAGE_NAME:未知
DEBUG_FLR_IMAGE_TIMESTAMP:0
STACK_COMMAND: ** 伪上下文 ** ; kb
FAILURE_BUCKET_ID:STACKIMMUNE_80000003_unknown!已卸载
BUCKET_ID:X64_APPLICATION_FAULT_STACKIMMUNE_NOSOS_unknown!AppName.exe
跟进:MachineOwner
这可能是罪魁祸首吗:“msdart”和“shfolder”的地址区域重叠??
【问题讨论】:
-
我们倾向于使用this live profiler - 可以很好地完成工作(尽管我们修改了它来为我们聚合堆栈,因为我们随时都有很多工作要做)。它的好处是不需要任何工具 - 只需运行 exe。
-
现在不可以从错误的机器中获取任务管理器中的进程转储并将它们加载到 VS 中吗?我会提交这个答案,但我不确定这会给你从一个实时(非崩溃)过程中带来什么。
-
@Marc:谢谢,我们下载了 cpu-analyzer.exe,但是当我们从命令行启动它时,例如:cpu-analyzer AppName /S 10 /I 1000,我们只能得到有关使用情况的信息和一个例子:Usage: cpu-analyzer ProcessName:PID [options] ... etc.. but no other information?
-
@RunCMD 你用你自己的 exe 名字代替了 AppName 吗?
-
是的,如果是错误的应用程序名称,我们会收到错误:错误:找不到具有该名称的任何进程
标签: c# .net windows debugging remote-debugging