VS单步调试F11想进入一个函数但是跳进另一个函数

下面是我写的两个函数,内容除了名称其他全部一致,VS编译器生成的二进制文件是相同的,所以自动优化掉
一个函数节省内存。当我调试打算F11进入SWITCH_STRU_INIT时,却发现跳到PHYSECTION_STRU_INIT。
有效方法是添加些变量让编译器不再优化两个函数。比如在PHYSECTION_STRU_INIT函数中添加int a = 0。
 
 
 
static void SWITCH_STRU_INIT(UINT8 pDataAddr[], OC_SwitchStru *pSwitchCfgDtStr)
{
    UINT8 *pData = NULL;
 UINT8 offset = 0;
    if((NULL != pDataAddr)&&(NULL != pSwitchCfgDtStr))
    {
        pData = pDataAddr;
        /*道岔 ID*/
        pSwitchCfgDtStr->wID = OcShortFromChar(&pData[offset]);
        offset += 2;
        /*所属 OC ID */
        pSwitchCfgDtStr->InOC_ID = OcShortFromChar(&pData[offset]);
        offset += 2;
        /*A系道岔模块 ID */
        pSwitchCfgDtStr->ModelID_A = pData[offset++];
 
        /*A系转辙机位置*/
        pSwitchCfgDtStr->DriveAddr_A =  pData[offset++];
        /*B系道岔模块 ID */
        pSwitchCfgDtStr->ModelID_B = pData[offset++];
        /*B系转辙机位置 */
        pSwitchCfgDtStr->DriveAddr_B =  pData[offset];
    }
    else
    {
        /* 无操作 */
    }
}
 
 
static void PHYSECTION_STRU_INIT(UINT8 pDataAddr[], OC_PhySectionStru *pPhySectionCfgDtStr)
{
    UINT8 *pData = NULL;
 UINT8 offset = 0;
    if((NULL != pDataAddr)&&(NULL != pPhySectionCfgDtStr))
    {
        pData = pDataAddr;
        /*物理区段 ID*/
        pPhySectionCfgDtStr->wID = OcShortFromChar(&pData[offset]);
        offset += 2;
        /*所属OC ID*/
        pPhySectionCfgDtStr->InOC_ID = OcShortFromChar(&pData[offset]);
        offset += 2;
        /*A系物理区段模块 ID*/
        pPhySectionCfgDtStr->ModelID_A = pData[offset++];
        /*A系物理区段位置*/
        pPhySectionCfgDtStr->DriveAddr_A = pData[offset++];
        /*B系物理区段模块 ID*/
        pPhySectionCfgDtStr->ModelID_B = pData[offset++];
        /*B系物理区段位置*/
        pPhySectionCfgDtStr->DriveAddr_B = pData[offset];
    }
    else
    {
        /* 无操作 */
    }
}
posted @ 2020-08-25 20:31  莫负年华向东流  阅读(1259)  评论(0编辑  收藏  举报