奇怪的程序挂起,这在调试中意味着什么?
奇怪的程序挂起,这在调试中意味着什么?
附上windbg后,我发现以下内容:
(1714.258): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=015b5c74 ebx=178a13e0 ecx=dddddddd edx=009a8ca0 esi=09fbf698 edi=09fbf594 eip=005ae2f7 esp=09fbf4a4 ebp=09fbf594 iopl=0 nv up ei ng nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010286 TestApplication!std::_Container_base::_Orphan_all+0x57: 005ae2f7 c70100000000 mov dword ptr [ecx],0 ds:0023:dddddddd=????????
调用堆栈:
TestApplication!std::_Container_base::_Orphan_all+0x57 TestApplication!std::vector >::operator=+0x37 TestApplication!boost::asio::detail::win_iocp_io_service::do_one+0x189 TestApplication!boost::asio::detail::win_iocp_io_service::run+0xa2 TestApplication!boost::asio::io_service::run+0x3a
问题
第一次机会异常意味着调试器在使用调试器的人员给予您第一次调试异常的机会之前,将它抛回到程序中以处理问题。
在这种情况下,例外是“访问冲突”。 这意味着您的程序正试图从非法内存位置读取/写入。
访问违规是严重的,因为它可能会破坏对您的程序至关重要的一些内存,这可能是您的程序挂起的可能原因。
从错误指令看来,您似乎正在尝试从非法指令中获取4字节值的内容。
调试问题
如果这是您的代码,那么您可以通过将调试符号位置设置为编译器的输出文件夹来轻松调试此问题(这将包含相关的pdb文件)
当你得到这个异常时,获取调用堆栈(其中一个视图窗口会有)
这会向您显示代码中发生故障堆栈的位置。
现在打开包含这个源的文件,并在那里设置一个断点,程序会打到这一点并停止在windebugger中。 从这一点开始进行调试,您将完全知道从哪一行代码中引发此违规行为
提示:Boost带有源代码,因此您可以轻松地在此代码中放置一个断点。 当你进入asio :: detail :: win_iocp_io_service :: do_one时,一定要在调试时按F11。
如果您使用的是MSVC和Debug构建配置,则0xdddddddd
通常意味着您正试图访问释放的内存。 调试CRT内存管理0xdd
填充空闲内存。
ecx寄存器的地址无效(dddddddd)。 我会建议这是一个内存损坏的情况。 考虑将流程转换为gflags。
链接地址: http://www.djcxy.com/p/86823.html