为什么 _mainCRTStartup 在调试打开时如此慢,但在调试关闭时却很快?
我在 64 位 Windows 7 上使用 Visual Studio 2010 的 32 位 GLUT。该项目仅包含我的 C++ 实现和头文件。没有 Win32 特定的代码。
我做了很多像素绘制操作。使用发布配置时它是瞬时的,但使用调试配置时速度非常慢(至少需要 5 秒才能绘制)。我注意到当我画得越多时,它的速度就越慢。所以我想,分析它。
Visual C++ 探查器显示 100%(我猜是四舍五入)的时间花费在 _mainCRTStartup
上。我知道这是 C 运行时,但是是什么导致它在调试配置中运行如此缓慢?在调试和发布配置中,等效的 C 代码同样是即时的。 C++ 是否有什么特殊之处导致 _mainCRTStartup
花费更长的时间?
编辑:显然我忽略了一件事:在 _mainCRTStartup 框架下,有一个对未知框架
的引用。我假设这是 main()
及其子函数。我无法让它实际分析我编写的函数,无论是在调试还是发布中。这之后我该去哪里?
I'm using 32-bit GLUT on 64-bit Windows 7 with Visual Studio 2010. The project just contains my C++ implementation and header files. No Win32-specific code.
I do a lot of pixel drawing operations. It's instantaneous with the release configuration, but very slow (at least 5 seconds until it draws) with the debug configuration. I noticed it slowed down more when I drew more. So I figured, profile it.
The Visual C++ profiler says 100% (I'm guessing that's rounded up) of the time is spent in _mainCRTStartup
. I understand this is the C run time, but what's causing it to run so slowly in the debug configuration? The equivalent C code is equally instantaneous when in both debug and release configurations. Is there anything special with C++ that makes _mainCRTStartup
take much longer?
EDIT: Apparently I overlooked one thing: under _mainCRTStartup frame, there is a reference to Unknown frame(s)
. I assume this is the main()
and its children functions. I cannot get it to actually profile the functions I wrote, either in debug or release. Where do I go after this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
调试器可能无法找到您使用的 DLL 的 .pdb 文件。首先要做的是检查您的符号服务器设置。工具+选项、调试、符号。取消选中符号文件位置并重试。
The debugger is probably having trouble finding the .pdb files for the DLLs that you use. First thing to do is to check your symbol server settings. Tools + Options, Debugging, Symbols. Uncheck the Symbol file locations and try again.
_mainCRTStartup
中的“独家 % 样本”是什么?对于此例程来说,包含在内的样本毫无价值。What the "exclusive % samples" in
_mainCRTStartup
? Inclusive samples are worthless for this routine._mainCRTStartup
是调用main
的主要函数。所以是的,对于每个程序,100% 的时间都花在该函数内 - 因为它调用所有其他函数。您正在分析调试模式吗?只是为什么?
_mainCRTStartup
is the primary function that callsmain
. So yes, for every program, 100% of the time is spent inside that function- because it calls all other functions.You're profiling Debug mode? Just why?