我正在使用Windbg从托管代码(C#,为Any CPU构建的控制台应用程序)加载故障转储,并在x64平台上创建故障转储.我在x64平台上调试.
我使用以下命令加载我的应用程序的私有符号.以下是我在Windbg中使用的命令.
(set symbol path and copy FooService.pdb pdb file to local symbol path D:\Debug)
0:016> .reload /f
.*** WARNING: Unable to verify checksum for FooService.exe
DBGHELP: FooService.pdb- private symbols & lines
D:\Debug\FooService.pdb
0:016> lm
start end module name
00000000`00400000 00000000`0041c000 FooService C (private pdb symbols) D:\Debug\FooService.pdb
Run Code Online (Sandbox Code Playgroud)
我的困惑是,当使用以下命令时,堆栈跟踪中不显示行号信息.有什么想法有什么不对?我需要设置源路径吗?
0:016> ~6 e!clrstack
Run Code Online (Sandbox Code Playgroud)
编辑1:我遇到了使用!pe和!U找到引发异常的堆栈跟踪的一些问题.
这是我的调试过程.首先,我使用!pe来打印异常对象的堆栈跟踪,当我使用!U来组装代码时.我找到的问题是!你将组装FooService.ProcessOrders()的所有函数代码,我想找到函数FooService.ProcessOrders发生崩溃的确切位置.我还发现反汇编带注释的IL代码只包含我所做的函数调用(对于非函数调用C#代码,例如a = a*2,只显示汇编语言),并不完全IL映射到每行C#代码,( 1)是正确的预期行为吗?(2)从我在此处发布的分析中找到确切的失败C#代码的解决方案或进一步建议是什么?
!pe 0000064280155325
StackTrace (generated):
SP IP Function
000000001A56DA70 00000642B74E3B7A System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(System.Data.Common.DbAsyncResult, System.String, Boolean)
000000001A56DB10 00000642B74E3FCC System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
000000001A56DB90 0000064280155325 FooService.ProcessOrders()
000000001A56F3E0 0000064280153A21 FooService.RountineJob()
!U 0000064280155325 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用symbolicatecrash,并获得有趣的结果.同事在另一台机器上构建了我们的分发版,所以他给我发了dSYM文件.运行中找到的symbolicatecrash文件后
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
它填补了所有Apple功能,但不支持我的功能.问题似乎是它不能(或不会)找到dSYM文件,可能是因为它有我的同事的机器信息.当我从崩溃报告中复制十六进制地址时,我可以像这样使用dwarfdump:
dwarfdump --lookup 0x0001f892 --arch ARMv6的路径/到/ MyApp.app.dSYM
它正确地给了我单个呼叫的行号.此外,symbolicatecrash能够从我们的代码中计算游戏的行号,而不是Apple的.我不知道为什么他不能看到苹果的东西,但是这一切都使我相信这个问题是寻找的dSYM,如前所述.
所以.有没有什么办法,只是传递的dSYM的路径进入symbolicatecrash命令,或使其工作的一些其他的方式?因为,严肃地说,制作一个为你的文件做某种魔术"搜索"的工具是完全愚蠢的,但却因为它不想要而找不到它.
另外,任何想法为什么我的同事的构建不会显示Apple的任何功能?虽然我在这里,崩溃文件中的"+"是什么意思?像这样:
0x00059f8c - [UIWindow sendEvent:] + 108
我有一个ASP.Net应用程序偶尔会崩溃并导致工作进程重新加载.系统在Windows Server 2008 R2 64位SP1上的IIS 7.5上运行.
我在Application Eventlog中收到一个Application Error事件,然后是一个Windows错误报告事件日志.
Windows错误报告事件日志将我指向一个目录:
C:\ ProgramData \微软\的Windows\WER\ReportQueue\AppCrash_w3wp.exe_624e5315e1074e44338812efe102157b47f6ca8_053f0ff3
浏览网页表明我应该能够在此目录中找到内存转储,但是,我所拥有的只有一个文件"Report.wer".
我的想法是,我需要修改一些注册表设置,以便在再次发生时获得崩溃转储,尽管我似乎无法找到需要更改的设置.
当前的注册表设置如下
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting]
"ErrorPort"="\\WindowsErrorReportingServicePort"
"MaxQueueSizePercentage"=dword:00000001
"PurgeThreshholdValueInKB"=dword:0000000a
"ServiceTimeout"=dword:0000ea60
"MachineID"="EAF7F17C-3D38-42B1-9C22-8CDD82DD7F90"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\Hangs]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\HeapControlledList]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\HeapControlledList\dwm.exe]
"EnableHeapThrottle"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\RuntimeExceptionHelperModules]
"C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\mscordacwks.dll"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\WMR]
"Disable"=dword:00000001
Run Code Online (Sandbox Code Playgroud)
有人可以让我知道我可能需要更改/添加哪些设置,以便在下次工作进程崩溃时获取内存转储.
asp.net memory-dump crash-dumps iis-7.5 windows-server-2008-r2
我是c#编程的新手,所以请记住:
我有一个内存数据对象,我需要在我的应用程序崩溃或关闭时保存信息.有没有办法确定性地或可靠地做到这一点?
我一直在寻找析构函数
~MyObjectName(){}
Run Code Online (Sandbox Code Playgroud)
终结者和Dispose(),
但据我所知,这些都不能可靠地做到我想要的吗?
目前我正在使用析构函数,它在我关闭程序时起作用,但这并不意味着它将在崩溃或总是工作.
我也应该看一下这些活动吗?
我知道LiveKd是一个创建转储分析的工具.
有人可以帮我一些帮助我学习如何使用LiveKd的链接吗?
我从来没有读过崩溃日志,所以我在这些水域中肯定是n00b.
我可以说有一个EXC_BAD_ACCESS.如何判断哪个对象应该在它应该发布之前发布?
*请注意,在应用处于活动状态时唤醒设备后会发生这种情况.它并不总是发生,但往往足够.
**编辑**
一个符号化的崩溃日志:
Incident Identifier: 14FFD847-61CB-435B-9E98-C06B3B661429
CrashReporter Key: 7c5fd78cf04b38cfd2aa153f61eb1655ed671274
Hardware Model: iPhone4,1
Process: My iPhone App [2599]
Path: /var/mobile/Applications/ABAB96ED-A203-48A5-8B50-B34BA3A8E4A4/My iPhone App.app/My iPhone App
Identifier: My iPhone App
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2012-07-01 22:17:43.458 -0600
OS Version: iPhone OS 5.1 (9B179)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xb4f05bbe
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x35a65f7e objc_msgSend …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Windows Phone 8.1应用程序.我想添加一个功能,只要应用程序崩溃,就会捕获内存转储并将其写入日志.
我想知道当用户在手机上使用该应用程序并且崩溃时,是否有任何方法可以记录崩溃转储.我发现这个问题与我的相似,但适用于Windows 8.它说我们可以在App.xaml.cs中使用'Application_UnhandledException'方法来获取转储.但这种方法是否也支持在Windows Phone 8.1中,因为我没有在App.xaml.cs的自动生成内容中看到这一点(由Visual Studio生成并包含OnActivated,OnLaunched等功能)
UnhandledException事件处理程序是否在Windows Phone 8.1中执行此操作?
我试图提出一个WinDbg命令行表达式,该表达式使用!DumpHeap命令的输出,并且对于每个地址,从0x08地址后的offset读取一个64位值。我认为这是可能的(不确定),但是到目前为止,我所做的每一次尝试都失败了,并出现了一些错误。
我进行了很多搜索,但是大多数WinDbg文章都显示了一些简单的示例,我可以尝试但尝试失败。
我有一个ASP.NET辅助进程的进程转储。该过程有一定的内存增长,但是没有明确的违规者,因此我试图列出在内存中出现多次的许多对象。我将sos.dll用于托管调试WinDbg扩展。
这就是我想要做的
.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{r @$t0=poi(myaddress+0x8);!do @$t0;.echo ************* myaddress}
Run Code Online (Sandbox Code Playgroud)
请注意,以上命令必须在一行上-我仅在此处添加了换行符以提高可读性。
对于上述行,WinDbg将显示以下错误:Couldn't resolve error at 'myaddress+0x8);!do @$t0;.echo ************* 00000001003cb870'。
我正在尝试遍历返回的所有地址!DumpHeap-每个地址都应放入myaddress变量中。然后,对于每个地址,我试图将$t0用户寄存器设置为从中读取的值myaddress+0x8。然后,!do(!DumpObject)命令将对象转储到该地址。
如果仅运行(再次在WinDbg的一行中):
.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{!do myaddress;.echo ************* myaddress}
Run Code Online (Sandbox Code Playgroud)
我得到了对象转储的列表,但这比我需要的高一个级别。我想更深入地钻取一层并转储我正在迭代的这些顶级对象的特定成员。
这可能吗,还是我走错了路?
我的客户正在使用我编写的VB6程序遇到软件崩溃.
我已经设置了注册表来生成完整的崩溃转储,我看到它与其他程序崩溃的系统正常工作,但出于某种原因,对于我的程序,它会在完全不同的目录中创建简单的崩溃转储.
我的程序在x64计算机上运行32位.我已经设置了如图所示的注册表,包括SOFTWARE\Microsoft和SOFTWARE\Wow6432Node\Microsoft.
仍然无法正常工作.
有谁知道我怎么能确定每次程序崩溃时都会产生完整的崩溃转储?

我使用WinDbg,我想得到异常细节.在!dumpheap -type Exception命令的帮助 下获取转储中的异常列表但是如何访问这些异常详细信息?
000007fef84e1298 1 160 System.StackOverflowException
000007fef84e1220 1 160 System.OutOfMemoryException
000007fef84e1388 2 320 System.Threading.ThreadAbortException
000007fef84e1038 2 320 System.Exception
000007fef84ec220 6 384 System.UnhandledExceptionEventHandler
000007fef746ea90 10 1760 System.Net.WebException
000007fef84ed780 131 22008 System.ObjectDisposedException
Run Code Online (Sandbox Code Playgroud) crash-dumps ×10
windbg ×4
.net ×3
c# ×3
asp.net ×2
clr ×1
debugging ×1
destructor ×1
iis-7.5 ×1
ios ×1
iphone ×1
memory-dump ×1
memory-leaks ×1
sos ×1
windows ×1