Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 了解Visual C+中的崩溃转储+;应用程序_C++_Crash Dumps - Fatal编程技术网

C++ 了解Visual C+中的崩溃转储+;应用程序

C++ 了解Visual C+中的崩溃转储+;应用程序,c++,crash-dumps,C++,Crash Dumps,更新 多亏了下面的反馈,我才得以熟悉ADPlus.vbs,它是Windows调试工具的一部分 在运行之前,不要忘记设置\u NT\u SYMBOL\u路径 使用它,我们能够更清楚地看到应用程序的细节,比使用Windows在应用程序崩溃时生成的常规转储更清晰 非常感谢大家的回复 原始问题 我们有一个服务器应用程序,在Visual C++中,在客户站点上有几次(相对较少)崩溃。我们无法通过查看自己的日志文件来理解为什么会发生这种情况,因此下一步是开始查看崩溃转储 我们只是故意在我们的应用程序中添加了

更新

多亏了下面的反馈,我才得以熟悉ADPlus.vbs,它是Windows调试工具的一部分

在运行之前,不要忘记设置\u NT\u SYMBOL\u路径

使用它,我们能够更清楚地看到应用程序的细节,比使用Windows在应用程序崩溃时生成的常规转储更清晰

非常感谢大家的回复

原始问题

我们有一个服务器应用程序,在Visual C++中,在客户站点上有几次(相对较少)崩溃。我们无法通过查看自己的日志文件来理解为什么会发生这种情况,因此下一步是开始查看崩溃转储

我们只是故意在我们的应用程序中添加了一个bug(一个空指针),这样我们就可以生成一个崩溃转储,并验证生成的转储是否有价值,但到目前为止,我无法完全理解我所看到的

我想我的第一个问题是我是否已经正确地设置了WinDbg(这里的另一个开发人员正在将转储加载到Visual Studio 2010,并且看到了相同的错误,所以我假设它是好的,或者我们都错了:)-然后下一个问题是,我如何理解它告诉我的内容

主要的困惑是转储似乎告诉我它已经达到了一个断点,这对我来说似乎很奇怪,因为没有连接调试器

应用程序崩溃时正在Windows Server 2003系统上运行。我相信我已经正确地将WinDbg指向了DLL和EXE的PDB文件

FAULTING_IP: 
ntdll!DbgBreakPoint+0
7c81a3e1 cc              int     3

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 7c81a3e1 (ntdll!DbgBreakPoint)
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 3
   Parameter[0]: 00000000
   Parameter[1]: 8779fdb0
   Parameter[2]: 00000003

DEFAULT_BUCKET_ID:  STATUS_BREAKPOINT

PROCESS_NAME:  CallPlusServerLauncher.exe

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION}  Breakpoint  A breakpoint has been reached.

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid

EXCEPTION_PARAMETER1:  00000000

EXCEPTION_PARAMETER2:  8779fdb0

EXCEPTION_PARAMETER3:  00000003

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

ADDITIONAL_DEBUG_TEXT:  Followup set based on attribute [Is_ChosenCrashFollowupThread] from Frame:[0] on thread:[ffffffff]

FAULTING_THREAD:  ffffffff

PRIMARY_PROBLEM_CLASS:  STATUS_BREAKPOINT

BUGCHECK_STR:  APPLICATION_FAULT_STATUS_BREAKPOINT

STACK_TEXT:  
1bd0ffc8 7c83fe08 00000005 00000004 00000001 ntdll!DbgBreakPoint
1bd0fff4 00000000 00000000 00000000 00000000 ntdll!DbgUiRemoteBreakin+0x36


FOLLOWUP_IP: 
ntdll!DbgBreakPoint+0
7c81a3e1 cc              int     3

SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  ntdll!DbgBreakPoint+0

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: ntdll

IMAGE_NAME:  ntdll.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  49900d60

STACK_COMMAND:  ddS 1bd10000 1bd0c000 ; dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~439s; .ecxr ; kb

BUCKET_ID:  MANUAL_BREAKIN

FAILURE_BUCKET_ID:  STATUS_BREAKPOINT_80000003_ntdll.dll!DbgBreakPoint

WATSON_STAGEONE_URL:      http://watson.microsoft.com/StageOne/CallPlusServerLauncher_exe/0_0_0_0/4df87414/ntdll_dll/5_2_3790_4455/49900d60/80000003/0001a3e1.htm?Retriage=1

Followup: MachineOwner
DbgBreakPoint——在我看来,您使用远程调试器中断了执行


如果您没有这样做,那么当您打开代码页(编辑:我的意思是
页面堆
)并且检测到无效内存访问时,我看到DbgBreakPoint出现。

断言也会触发断点异常。例如,当堆被双重删除或溢出损坏时,我(经常)看到它们从堆中出来,围绕着删除进行检查。但我认为只有在调试运行时,您才部署了它?

无论好坏,我们的代码中至少没有断言,我们引入的“bug”是一个简单的空指针问题。谢谢你的反馈。肯定不是由远程调试器引起的。我们没有意识到我们打开了代码页,没有,但是如果有空指针引用的话,检测无效内存访问大概不会离目标太远吧?有没有办法让转储文件告诉我们无效内存访问发生在哪里?@Matt Peddlesden-打开代码页,在崩溃模式下使用ADPlus.exe运行它。当发生无效访问时,ADPlus应该生成一个完全转储。老实说,不完全确定您所指的“代码页”是什么-这不是关于字符集吗?例如,1250是欧洲,437是美国?对不起,“页面堆”不是代码页!难怪你感到困惑。基本上,将已知十六进制模式的定界区域添加到分配内存区域的开始和结束。在这里查看这些资源和。ADplus是windows调试工具的一部分,如果您使用的是WinDBG,您应该已经拥有了它。啊哈,好的,是的,我找到了ADplus-我现在就去阅读页面堆,谢谢Dennis!