C++ C++;程序在ntdll.dll执行时挂起
当我尝试运行程序时,它从未进入main()函数,只是挂起。然而,我的程序在多次调用ntdll.dll之后,在堆栈中的第一个调用中,在我的一个类中抛出了一个异常。异常似乎是导致我的程序挂起并带有“C++ C++;程序在ntdll.dll执行时挂起,c++,C++,当我尝试运行程序时,它从未进入main()函数,只是挂起。然而,我的程序在多次调用ntdll.dll之后,在堆栈中的第一个调用中,在我的一个类中抛出了一个异常。异常似乎是导致我的程序挂起并带有“”的因素。但是,我无法触发我设置的任何断点,因此很难找到问题的根源。您需要找出导致崩溃的系统调用。通常,这种事情是将垃圾传递到某些windows API的结果 使用调试器并查看调用堆栈。代码中的最后一个条目可能是问题的原因。它可能有一些不正确的数据。您需要找出导致崩溃的系统调用。通常,这种事情是将垃圾传递
使用调试器并查看调用堆栈。代码中的最后一个条目可能是问题的原因。它可能有一些不正确的数据。您需要找出导致崩溃的系统调用。通常,这种事情是将垃圾传递到某些windows API的结果
使用调试器并查看调用堆栈。代码中的最后一个条目可能是问题的原因。它可能有一些不正确的数据。这听起来像是在使用全局对象/单例。如果其中任何一个相互依赖,你就有麻烦了。我会寻找你们所有的球,并在每一个球的构造器中设置一个断点。听起来好像一个全局的构造函数正在使用另一个全局,但第二个全局的构造函数还没有被构造出来
最后,如果这不是原因,并且您的应用程序正在加载第三方DLL,它们可能会发生冲突。我记得有一次,orbix和ms消息队列DLL分类在一个之前被加载,如果它们以相反的方式加载,一切都会正常工作。最后,为了找到这个问题,我删除了所有东西,直到只剩下一个空的main,然后开始一个接一个地添加东西,直到发现问题。这听起来像是在使用全局对象/单例。如果其中任何一个相互依赖,你就有麻烦了。我会寻找你们所有的球,并在每一个球的构造器中设置一个断点。听起来好像一个全局的构造函数正在使用另一个全局,但第二个全局的构造函数还没有被构造出来
最后,如果这不是原因,并且您的应用程序正在加载第三方DLL,它们可能会发生冲突。我记得有一次,orbix和ms消息队列DLL分类在一个之前被加载,如果它们以相反的方式加载,一切都会正常工作。最后,为了找到这个问题,我删除了所有内容,直到只剩下一个空的main,然后开始逐个添加内容,直到发现问题。添加更多信息,即:挂起时的堆栈转储、调用内核的API调用以及崩溃时的源代码。ntdll点是irelevant,是线程转换为内核的时间。添加完整堆栈。添加更多信息,例如:挂起时的堆栈转储、调用内核的API调用以及崩溃时的源代码。ntdll点是iRelant,是线程转换到内核时的点。添加完整的堆栈。