为什么VS2005中的调用堆栈只显示DLL调用而不显示原始调用?

时间:2013-03-05 03:23:31

标签: debugging dll windows-services visual-studio-2005

请原谅我的无知,但我不熟悉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

1 个答案:

答案 0 :(得分:0)

有两种可能性:

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

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