2009-08-13 190 views
1

当我尝试运行我的程序时,它永远不会进入main()函数,而是挂起。有些时候,我的程序在多次调用ntdll.dll之后,在堆栈中的第一个调用中抛出了一个异常。异常似乎是导致我的程序挂起“<坏ptr>”的因素。我无法触发任何我设定的断点,这使得难以找到问题的起因。C++程序在执行ntdll.dll时挂起

+1

添加更多信息,即:挂起时的堆栈转储,调用内核的API调用以及崩溃周围的源代码。 – 2009-08-13 18:27:08

+0

ntdll点是irelevant,是线程转换到内核的时候。添加完整的堆栈。 – 2009-08-13 18:32:02

回答

3

您需要确定导致崩溃的系统调用。通常这种事情是将垃圾传入某些Windows API的结果。

使用调试器并查看调用堆栈。代码中的最后一项很可能是问题的原因。它可能有一些不正确的数据处理不当。

1

这听起来像你正在使用全局对象/单身人士。如果其中任何一个取决于对方,你就有麻烦了。我会寻找所有的全局变量,并在每个构造器中设置一个断点。这听起来像是一个全球的构造者正在使用另一个全球化,但第二个尚未被构建。

最后,如果这不是原因,并且您的应用程序正在加载第三方dll,它们可能会发生冲突。我记得有一次,orbix和ms消息队列dll在一个之前被加载,如果它们被反向加载,所有的都可以工作。最后找到这个我删除了所有东西,直到我剩下一个空的主体,然后开始逐个添加东西,直到我发现问题。