Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“之后”;“打破一切”;在VisualStudio2010中,一些线程';调用堆栈在我的C++;程序 我的跨平台C++应用程序的最新版本(使用JUCE)可能是死锁,或者是Windows中的无限制循环,但不是MAC,很遗憾,此时我们没有Windows开发人员,所以这取决于我。_C++_Windows_Visual Studio_Visual Studio 2010_Stack Trace - Fatal编程技术网

“之后”;“打破一切”;在VisualStudio2010中,一些线程';调用堆栈在我的C++;程序 我的跨平台C++应用程序的最新版本(使用JUCE)可能是死锁,或者是Windows中的无限制循环,但不是MAC,很遗憾,此时我们没有Windows开发人员,所以这取决于我。

“之后”;“打破一切”;在VisualStudio2010中,一些线程';调用堆栈在我的C++;程序 我的跨平台C++应用程序的最新版本(使用JUCE)可能是死锁,或者是Windows中的无限制循环,但不是MAC,很遗憾,此时我们没有Windows开发人员,所以这取决于我。,c++,windows,visual-studio,visual-studio-2010,stack-trace,C++,Windows,Visual Studio,Visual Studio 2010,Stack Trace,我可以在Visual Studio 2010下有问题地运行该程序,然后当我点击“失去活力”:-D时,我使用“全部中断”命令,该命令似乎会挂起我的所有线程。很好很好,而且大多数堆叠都非常合理。不幸的是,一些线程,包括我怀疑处于死锁状态的两个线程,没有可用的调用堆栈 我完全理解堆栈的“顶部”不会出现,因为我没有例如ntdll.dll的调试信息。但我似乎只是从堆栈的中间得到了一点点 我包括一个坏的堆栈和一个好的堆栈供您阅读。您可以看到,好的堆栈可以一直追溯到线程的调用函数,但坏的堆栈只有一个有效帧 这

我可以在Visual Studio 2010下有问题地运行该程序,然后当我点击“失去活力”:-D时,我使用“全部中断”命令,该命令似乎会挂起我的所有线程。很好很好,而且大多数堆叠都非常合理。不幸的是,一些线程,包括我怀疑处于死锁状态的两个线程,没有可用的调用堆栈

我完全理解堆栈的“顶部”不会出现,因为我没有例如ntdll.dll的调试信息。但我似乎只是从堆栈的中间得到了一点点

我包括一个坏的堆栈和一个好的堆栈供您阅读。您可以看到,好的堆栈可以一直追溯到线程的调用函数,但坏的堆栈只有一个有效帧

这个画面是合理的,但我不知道为什么我看不到其他画面,这让我的工作非常困难

如果您有任何想法,我们将不胜感激-希望您的一天比我的一天更有成效!:-D

编辑:对不起,当我在上面指出我知道Microsoft符号丢失时,我想我已经很清楚了,但我不在乎。问题是堆栈跟踪缺少代码中我确信有调试符号的所有帧

实际上我已经通过了死锁,所以这现在不是问题,但它使效果更加令人费解,因为我现在知道我没有(例如)以某种方式搞砸调用堆栈

现在,我有更多关于“下一个家伙”的信息——我是从一个线程调用顶级窗口上的函数,而不是windows线程。(这是一个跨平台的应用程序,在Mac上它不关心你从哪个线程调用这些应用程序。)这就是导致“死锁”的原因(实际上,我不认为这不是真正的死锁,而是其他一些“失去活力”),我想知道是不是这个问题也导致Visual Studio 2010拒绝正确显示堆栈

--堆栈错误--

ntdll.dll!7c90e514()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
user32.dll!7e4299ff()
ntdll.dll!7c90e514()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7c90df5a()
kernel32.dll!7c8025db()
kernel32.dll!7c802542()
SlowGold 8 (debug build).exe!juce::WaitableEvent::wait(const int timeOutMillisecs)  Line 103 + 0x10 bytes   C++
SlowGold 8 (debug build).exe!juce::Thread::wait(const int timeOutMilliseconds)  Line 304    C++
SlowGold 8 (debug build).exe!rec::util::thread::Looper<int (__cdecl*)(rec::slow::Instance *),rec::slow::Instance *>::run()  Line 24 C++
SlowGold 8 (debug build).exe!juce::Thread::threadEntryPoint()  Line 145 C++
SlowGold 8 (debug build).exe!juce::juce_threadEntryPoint(void * userData)  Line 156 C++
SlowGold 8 (debug build).exe!juce::threadEntryProc(void * userData)  Line 126 + 0x9 bytes   C++
SlowGold 8 (debug build).exe!_callthreadstartex()  Line 314 + 0xf bytes C
SlowGold 8 (debug build).exe!_threadstartex(void * ptd)  Line 297   C
SlowGold 8(调试构建).exe!JuS::WIN32组件::StPoint(int x,int y)513 C++ SlowGold 8(调试构建).exe!008005f9()

编辑:是的,我看到了“没有为ntdll.dll加载任何符号”的事实,但这不是问题所在:问题是堆栈中只有一个帧。有关同一程序中不同线程的“良好堆栈”示例,请参见下一个堆栈

--良好的堆栈--

ntdll.dll!7c90e514()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
user32.dll!7e4299ff()
ntdll.dll!7c90e514()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7c90df5a()
kernel32.dll!7c8025db()
kernel32.dll!7c802542()
SlowGold 8 (debug build).exe!juce::WaitableEvent::wait(const int timeOutMillisecs)  Line 103 + 0x10 bytes   C++
SlowGold 8 (debug build).exe!juce::Thread::wait(const int timeOutMilliseconds)  Line 304    C++
SlowGold 8 (debug build).exe!rec::util::thread::Looper<int (__cdecl*)(rec::slow::Instance *),rec::slow::Instance *>::run()  Line 24 C++
SlowGold 8 (debug build).exe!juce::Thread::threadEntryPoint()  Line 145 C++
SlowGold 8 (debug build).exe!juce::juce_threadEntryPoint(void * userData)  Line 156 C++
SlowGold 8 (debug build).exe!juce::threadEntryProc(void * userData)  Line 126 + 0x9 bytes   C++
SlowGold 8 (debug build).exe!_callthreadstartex()  Line 314 + 0xf bytes C
SlowGold 8 (debug build).exe!_threadstartex(void * ptd)  Line 297   C
ntdll.dll!7c90e514()
[下面的帧可能不正确和/或丢失,没有为ntdll.dll加载符号]
ntdll.dll!7c90df5a()
内核32.dll!7c8025db()
内核32.dll!7c802542()
SlowGold 8(调试构建).exe!JuS::WaiabeEngult::等待(const int TimeOutMalsiCs)行103 +0x10字节C++
SlowGold 8(调试构建).exe!线程::等待(const int TimeOutMalsidis)304行C++
SlowGold 8(调试构建).exe!RUC::UTI::线程::LooRe::Run()24行C++
SlowGold 8(调试构建).exe!线程::TyReCexyPoothPoT()145行C++
SlowGold 8(调试构建).exe!JueEththTraceCytoPosie:(Vulu*USEDATA)156 C++
SlowGold 8(调试构建).exe!JuS::THeLeTexyPro(VUL*USEDATA)行126 +0x9字节C++
SlowGold 8(调试构建).exe_callthreadstartex()行314+0xf字节C
SlowGold 8(调试构建).exe_螺纹Startex(空心*ptd)297 C线
内核32.dll!7c80b729()


编辑:您可以在这里看到,尽管我没有完整的堆栈,但我有很多来自我自己代码的帧-您可以看到我们从线程顶部进入的位置,以及我们调用Microsoft DLL的位置。

听起来您缺少符号(并不是所有符号都给出了),但是,Microsoft分发的大部分,并非所有符号都在其符号服务器上

注意:我从来没有这样做过。在任何情况下,请查看Microsoft的symbol server以了解如何在此处执行此操作:。

2件事:

1) “清理”解决方案,然后再次构建并在调试模式下运行(确保选择启动调试(F5)而不是“启动而不调试”(即CTRL+F5)


2) 好吧,这些都是Windows API函数-您确定需要在该级别调试坏堆栈吗?“坏堆栈”进入user32.dll,这是Windows的GUI端。我认为您不需要调试这些堆栈,但我不能确定。

您需要system.dll的调试符号来正确地遍历堆栈。即使您碰巧在调用堆栈中获得了看似正确的条目,但如果堆栈本身有过时的数据(例如,旧的返回指针),仍然可能有错误的调用堆栈

由于您使用的是VS 2010,您应该能够右键单击调用堆栈中的任何system.dll,并直接从Microsoft Symbol服务器加载符号。您还可以进入工具->选项->调试->符号,让调试器自动执行此操作


如果可以,您应该始终使用system.dll符号。

这对于响应来说有点晚,但我有一个类似的问题,我花了一段时间才找到,就像OP一样,我在SO或Google上找不到任何解决问题的方法。我在这里回答这个问题是因为这个问题中的场景与我的非常相似,所以谷歌很可能会为其他人找到这个问题

关于我的问题,我们有一台电脑有完整的堆栈跟踪,还有一台电脑有不完整的堆栈跟踪。我找到解决方案的方法是使用Visual Studio模块窗口(调试菜单| Windows |模块)。此窗口告诉您加载了哪些模块,重要的是哪些模块加载了符号。在我的情况下,两个都是mac