使用VS2013社会版能正常仿真调试过这段代码,但换到VS2013旗舰版或VS2022就无法仿真调试过这段代码,一到这段代码程序就运行不下去。

问题遇到的现象和发生背景
使用VS2013社会版能正常仿真调试过这段代码,但换到VS2013旗舰版或VS2022就无法仿真调试过这段代码,一到这段代码程序就运行不下去。
问题相关代码,请勿粘贴截图

一、头文件1   GDATA.h
class GData //供全局使用的数据:Global Data   //该类在头文件GDATA.h里
{
public:
    GData();
    ~GData();
    friend class singleton<GData>;

    void init(void);

    
    bool getExitFlag(void);
    void setExitFlag(bool exitFlag);

    Ini_Data* pIniData;
};

二、头文件二 singletonl.h
template <class T>                //该类在头文件singletonl.h里
class singleton
{
public:
    static T& instance()
    {
        static T _instance;
        return _instance;
        
    }
};

三、正式代码里
GData  *pGData = &(singleton<GData>::instance());//这行代码仿真调试不过

运行结果及报错内容

我的解答思路和尝试过的方法
我想要达到的结果
希望知道这段代码为什么在VS2013社会版这段代码能仿真调试,而在旗舰版无法仿真调试

报错信息发出来,总不能让大家猜吧

1.问题描述:无法找到xxx.exe的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件

解决方法:属性->链接器->调试->生成调试信息:是

2.问题描述:设置断点但无法调试

解决方法:属性->C/C++->常规->调试信息格式:设置为程序数据库

3.问题描述:主程序可以调试,调用的dll模块不能调试,提示“当前不会命中断点还没有为该文档加载符号”

解决方法:每个模块都是设置问题2中的调试信息格式

4.问题描述:调试时变量内容看不到,显示无法读取内存或未定义标识符

解决方法:每个项目都要做这样的处理,右键工程->属性->C/C++->优化->“已禁用/Od”

vs的兼容是永远的痛,看下报错代码,估计那个函数改了吧

VS版本升级后实施了强制安全检查,你的代码有错误,被检查出来了。类singleton的instance函数返回的是局部变量,在该函数退出的时候已经不可使用返回的变量了。理论上该变量在函数返回的时候就会被释放,但因为定义为static,所以没有释放内存,只是依然不允许再被访问,安全检查不严格时,你的程序只是因为内存地址问题凑巧运行了,不代表你的代码正确。

仔细跟踪了下,应该是执行这行代码后,执行调用mysql的数据库DLL时失败了,所以一直卡在


```c++
DBConnect* pDBConn = DBConnPool::Instanse()->GetAConnection();


``
这里,为什么都是2013,同样工程,社会版仿真没问题,旗舰版反而不行