0

请原谅我的无知,但我不熟悉 Visual Studio 或 Windows DLL 和服务。通常我在嵌入式环境中工作,但不知何故(我猜只是幸运)我被选中解决我们的一个 Windows 服务中发生的崩溃,实际上是在 MSVCR80.DLL 中,但我必须假定这是由我们的服务引起的(Windows下面的事件日志)

Faulting application name: MySrvc.exe, version: 0.0.0.0, time stamp: 0x4fee02e5
Faulting module name: MSVCR80.dll, version: 8.0.50727.4940, time stamp: 0x4ca2b271
Exception code: 0xc000000d
Fault offset: 0x00008aa0

我遇到的问题是,当我附加到进程然后让它崩溃时,调试器会中断,然后调用堆栈只有 mscvr80.dll 和 ntdll.dll 中的一些调用,仅此而已,没有来自我们服务的调用进入那些图书馆。我的猜测是该库是多线程的,而我看到的堆栈只是其中一个线程。但是当VS调试器中断时,它不会暂停所有线程吗?有没有办法检查其他线程的调用堆栈?还是我完全不在这儿?

再次,请原谅我在这方面的无知。您可以提供的任何建议或方向将不胜感激。提前致谢!

-H

4

1 回答 1

0

有两种可能:

  1. 正如您所说,您正在查看错误的线程,在这种情况下,您可以通过 Debug / Windows / Threads 使用 Threads 窗口切换到正确的线程。(但这不太可能——当线程崩溃时,VS 会显示该线程。)

  2. 您需要加载系统 DLL 的符号 - Visual Studio 有时无法在没有符号的情况下跟踪堆栈跟踪。转到工具/选项/调试/符号并确保您从 Microsoft 获得符号。

于 2013-03-05T03:34:14.830 回答