当您的应用程序在iOS上出现错误时返回的崩溃日志非常精彩,但如果它包含从您的应用程序作为日志的一部分启动时的控制台输出,则会好100倍.有没有办法在崩溃日志中自动获取该信息,或者有一个半自动系统,测试人员在发送崩溃日志时可以使用该系统?
我最近在工作的XP盒子里得到了很多蓝屏.事实上,我下载了很多用于Windows(x86)的调试工具,并且一直在分析崩溃转储.事实上,我已经将转储更改为mini,否则我可能最终会在每周工作半天,等待蓝屏完成记录详细的崩溃日志.
几乎无一例外每个转储告诉我蓝屏的原因是某种内存错误分配或错误引用,0x%08lx的内存引用0x%08lx而不能是%s.
出于好奇心,我把"0x%08lx"放入谷歌,发现很多崩溃转储包含了这个奇怪的消息.我是否认为0x%08lx是一个有意义的东西?"%s"是结尾句子"内存不能是%s"的一部分,看起来肯定是缺少变量或其他东西.
有谁知道这条消息的来源?它实际上应该是有用的,它应该是什么样的?
这不是我一直在努力解决的重大问题.奇怪的是,很多人都应该在如此多的故障转储中看到这一点,并且没有人会说:"哦,崩溃转储没有正确地完成那个消息它应该读......"
我只是好奇是否有人知道这个奇怪的错误消息artefact的目的.
我正在尝试从我正在编写的代码中获取可用的核心转储。我的源位于我在 Windows 和 Linux 操作系统之间共享的 NTFS 分区上。我正在 Linux 下进行开发,并ulimit -c unlimited在我的 bash shell 中进行了设置。当我在 NTFS 分区上执行我的项目目录中的代码,并故意导致 SIGSEGV 或 SIGABRT 时,系统会写入一个零字节的核心转储文件。
如果我在我的主目录(一个 ext4 分区)中执行二进制文件,核心转储生成正常。我查看了 core的手册页,其中列出了不生成核心转储文件的各种情况。但是,我认为这不是权限问题,因为该分区上的所有文件和目录都具有完全权限 ( chmod 777)。
任何帮助或想法表示赞赏。
如果我有进程转储文件,是否知道转储是在 x64 机器还是 x86 机器上生成的?
我很难从使用ProcDump创建的崩溃转储中获取任何有意义的信息,但我很确定它与我一直看到的看似随机的崩溃有关.
我有一个在Windows 7 64位上运行的VB6应用程序.每隔一段时间,它就会崩溃,在错误日志中留下一个错误ntdll.dll的条目,但不提供更多信息.所以,我一直在运行SysInternals的ProcDump运行过程,为我自动创建故障转储.
我一直无法在内部重新制造崩溃,所以我很确定如果我有一个转储,它会告诉我问题是什么.但是,在运行一天的大部分时间之后,我看到ProcDump已经编写了几个转储,尽管该程序仍然正常运行.它似乎确实指向ntdll.dll的问题,但我不知道从哪里开始应用此修复程序.
!analyze -v在其中一个转储上运行会给我以下内容:
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
FAULTING_IP:
+0
00000000 ?? ???
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
FAULTING_THREAD: 000007c8
PROCESS_NAME: application.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
APP: application.exe
BUGCHECK_STR: APPLICATION_FAULT_STATUS_BREAKPOINT_AFTER_CALL
PRIMARY_PROBLEM_CLASS: STATUS_BREAKPOINT_AFTER_CALL
DEFAULT_BUCKET_ID: STATUS_BREAKPOINT_AFTER_CALL
LAST_CONTROL_TRANSFER: from 7754431f …Run Code Online (Sandbox Code Playgroud) 这个问题可能有点尴尬,但这是我的详细问题:
目前我正在考虑设置SysInternals的procdump.exe以监控我们的应用程序,它显示虚假消失 - 也就是说,用户报告应用程序在应用程序的短暂可见挂起之后简单地"消失"而没有任何痕迹窗口.
我的第一个想法是运行procdump -e -x . MyApp.exe,当应用程序遇到未处理的异常时会记录崩溃转储,但后来我发现还有一个-t开关, -
-t - 进程终止时写入转储.
进程终止时自动生成转储.
我已经使用我们的应用程序测试了-t开关,方法是在我可以触发它的已定义位置插入ExitProcess或TerminateProcess调用.
虽然应用程序的行为符合预期,即TerminateProcess立即"杀死"正在运行的应用程序并ExitProcess需要一段时间,因为全局清理运行,这种方式生成的转储在这两种情况下都是无用的.
我得到的转储-t总是只包含一个sinlge线程(应用程序在终止时运行超过20个线程),并且callstack甚至不在一个有用的位置.(它似乎是终止应用程序中的一个随机线程.)
难道我做错了什么?我是否可以有效地用于procdump -t跟踪进程退出函数的意外调用?
我的应用程序(Sol 10-32位上的C ++)崩溃了,该应用程序生成的内核大小为4 GB。我可以假设应用程序在即将崩溃时最多可以使用4 GB的内存(与核心文件的大小相同)吗?PS。我的应用程序是独立的,不依赖于任何其他进程。
有什么方法可以检查应用程序和核心文件使用的总内存吗?
我正在尝试从WER在崩溃时采用的本机转储中提取Java堆转储:
jstack -m -l "c:\Program Files\Java\jre6\bin\java.exe" WER.tmp.hdmp
Run Code Online (Sandbox Code Playgroud)
但我得到以下异常:
Attaching to core c:\Users\xxx\Desktop\WER.tmp.hdmp from executable c:\Program Files\Java\jre6\bin\java.exe, please wait...
sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypes" in any of the known library names (jvm.dll, jvm_g.dll)
at sun.jvm.hotspot.HotSpotTypeDataBase.lookupInProcess(HotSpotTypeDataBase.java:389)
at sun.jvm.hotspot.HotSpotTypeDataBase.readVMTypes(HotSpotTypeDataBase.java:104)
at sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.java:85)
at sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:565)
at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:494)
at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:348)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:169)
at sun.jvm.hotspot.tools.JStack.main(JStack.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.tools.jstack.JStack.runJStackTool(JStack.java:118)
at sun.tools.jstack.JStack.main(JStack.java:84)
Debugger attached successfully.
jstack requires a java VM process/core!
Run Code Online (Sandbox Code Playgroud)
我仔细检查过:
如果我尝试使用jmap提取java堆转储,我会得到完全相同的错误.
有谁知道会出现什么问题?
我有一个Windows应用程序,我们开发用于室内使用.由于Windows错误处理,窗口保持打开状态,我可以轻松地从任务管理器生成故障转储.
我之前曾经通过eclipse在linux上使用过崩溃,但这是Windows上的第一次.
服务器是Windows 2012,我的开发机器是Windows 7.
当我在Windbg中加载崩溃转储时,加载我的符号,然后选择查看调用堆栈,唯一的列表是:
如何具体查看我的应用程序调用堆栈?
最近我开始面对几个服务器上的问题,其中CPU开始消耗比平常趋势更多的资源.我试图找出这个的根本原因并从任务管理器转移w3wp进程(右键单击进程并进行转储).
现在dmp文件大小是14GB,我试图通过WinDBG分析它,但该工具无法正常工作并获取消息:

我也拿了几个minidumps,但是其中一些打开很好,而很少不是这样,它与32位或64位之间的混淆无关.(收集的转储是64位).我想知道造成这个问题的原因.它是文件大小还是我没有正确地进行转储.
我检查了链接,但没有用.