debugging wntdll.pdb未加载-看不到异常

bzzcjhmw  于 2022-11-14  发布在  其他
关注(0)|答案(5)|浏览(161)

有时当我退出我的应用程序(SaviHOST运行我正在制作的DLL)时,我会显示此屏幕:

不幸的是,我不知道错误发生在哪里,因为它只加载了那个屏幕,而不是发生异常的那一行。
我该如何解决这个问题?wntdll.pdb与此有什么关系?谢谢

cigdeys3

cigdeys31#

要查看代码中的哪一行导致了它,请单击“继续”,然后弹出一个窗口,单击“重试”。
示例:

6vl6ewon

6vl6ewon2#

1.连接到Internet。
1.在符号路径设置中启用Microsoft符号服务器。

1.关闭VS(我使用VS 2015)
1.重新启动并使用本机进行调试。所有符号都将从MS服务器加载。

pdtvr36n

pdtvr36n3#

我遇到了同样的错误,结果是我试图删除一个指针,而这个指针没有用类析构函数中的new运算符初始化。

example:

class smu
{
public:
    smu();
    ~smu()
    {
         delete voff
    }
private:
    char* voff;
};
svmlkihl

svmlkihl4#

设置应用程序使用微软的符号。重建和启动应用程序,它应该加载所有的符号为您,它可能需要一段时间取决于您的互联网屏幕,我自己正在加载所有的符号现在...男孩它需要时间!

6jjcrrmo

6jjcrrmo5#

我在一个非基于Web的应用程序中遇到了同样的问题。我非常生气,但结果发现这是我的一个类的析构函数中的一个小逻辑和语法错误。以下是代码:

// Constructor //
StatusTrigger_Manager::StatusTrigger_Manager( bool isCreator,unsigned short desiredMemberCount )
{
    maxMembers = desiredMemberCount;
    memberHoldersRequired = ( maxMembers / 32 ) + 1;
    memberHolders = new unsigned int[ memberHoldersRequired ];
    for ( unsigned short index = 0; index < memberHoldersRequired; index++ )
    {
        memberHolders[ index ] = 0;
    }
    //
    if ( isCreator )
    {
        stringList = new STRINGLIST_STATUSTRIGGERS[ maxMembers ];
        // Initialize 'stringList' members to default names
        unsigned char memberName_ValueOffset = 7;
        for ( unsigned int index = 0; index < maxMembers; index++ )
        {
            // Set current member name to default
            stringList[ index ].memberName = new char[ 14 ] { "Member_00000\0" };
            unsigned short individualVal =     0;
            unsigned short    valDivider = 10000;
            unsigned int tempIndex = index;
            for( unsigned char i = 0; i < 5; i++ )                  {
                individualVal = ( index / valDivider ) + 48;
                stringList[ index ].memberName[ i + memberName_ValueOffset ] = individualVal;
                tempIndex -= ( individualVal - 48 ) * valDivider;
                valDivider /= 10;                                   }
            tempIndex = 0;
        }
    }
    else
        stringList = nullptr;
}

// Destructor //
StatusTrigger_Manager::~StatusTrigger_Manager()
{
    if ( stringList != nullptr )
    {
        delete[] &stringList[ 0 ].memberName;
        stringList[ 0 ].memberName = nullptr;
    }
    if ( memberHoldersRequired == 1 )
        delete memberHolders;
    else if ( memberHolders != 0 )
        delete[] memberHolders;
}

这是在修正了dll问题和内存泄漏问题之后的析构函数。小的改变--但是头发现在又长回来了。

// Destructor //
StatusTrigger_Manager::~StatusTrigger_Manager()
{
    if ( stringList != nullptr )
    {
        for ( unsigned int index = 0; index < maxMembers; index++ )
        {
            delete[] stringList[ index ].memberName;
            stringList[ index ].memberName = nullptr;
        }
    }
    if ( memberHoldersRequired == 1 )
        delete memberHolders;
    else if ( memberHolders != 0 )
        delete[] memberHolders;
}

当同样的问题在调试模式下没有发生时,我得到了提示-通常是由于只在调试模式下设置为默认值的变量未初始化而导致的,或者根据我的经验,未能正确删除数组。希望它能有所帮助。祝你好运。

相关问题