【问题标题】:Why does my call stack in VS2005 only show DLL calls and not the originating call?为什么我在 VS2005 中的调用堆栈只显示 DLL 调用而不显示原始调用?
【发布时间】:2013-03-05 03:23:30
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    有两种可能:

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

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

    【讨论】:

    • 感谢您的回复,但似乎两者都不是...如果/当我最终弄清楚时,我会更新 -H
    猜你喜欢
    • 2012-10-15
    • 2014-11-13
    • 1970-01-01
    • 2012-01-04
    • 2018-02-03
    • 2011-01-16
    • 2021-12-06
    • 2012-05-06
    • 1970-01-01
    相关资源
    最近更新 更多