加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 教程 > 正文

C语言断点调试和编译问题概括

发布时间:2021-12-16 13:48:07 所属栏目:教程 来源:互联网
导读:1. 编译环境使用VS2008,在调试过程中发现,某个函数的部分代码没有正确执行,在这部分代码处打断点调试,发现每次调试运行时总是提示断点无效。出问题的代码如下,在while(){}代码块内部打断点提示断点无效。 INT32 sendLTEMsg(void *pMsg, INT32 iMsgLen) {
1. 编译环境使用VS2008,在调试过程中发现,某个函数的部分代码没有正确执行,在这部分代码处打断点调试,发现每次调试运行时总是提示断点无效。出问题的代码如下,在while(){}代码块内部打断点提示断点无效。
 
INT32 sendLTEMsg(void *pMsg, INT32 iMsgLen)  
{  
    INT32 t_iLeft = iMsgLen;  
    INT32 t_iRet = 0;  
    INT32 t_idx = 0;  
    if((NULL==pMsg) || (0==iMsgLen))  
    {  
        return FALSE;  
    }  
    while(t_iLeft>0) /*保证将数据全部发送出去*/  
    {  
        t_iRet = send(g_SockClientLTE, &(((char*)pMsg)[t_idx]), t_iLeft, 0);  
        if(t_iRet == 0)  
        {  
            break;  
        }  
        else if(t_iRet == SOCKET_ERROR)  
        {  
            INT32 t_errcode = WSAGetLastError();  
            return FALSE;  
        }  
        t_iLeft -= t_iRet;  
        t_idx += t_iRet;  
    }/*end of while*/  
    return TRUE;  
}  
2. 那么,在什么情况下会导致运行时断点无效或不能在指定的位置打断点呢?
a) 是否编译时存在调试信息?
    需要查看编译选项,debug or release(说白了就是编译时的optimizationlevel),debug会存在调试信息。
b) 在编译完成之后代码是否有改动?
    代码可能已经和可执行文件不一致,导致打断点的位置和预期程序执行的位置不一致。如下图,断电停在a--的位置,但是程序已经输出了hello world。
 
 
 
c) 是否将这部分代码编译到了目标文件?
    比如条件编译的影响,没有对这部分代码进行编译,当然就不可能打断点。那么,如何判断代码是否编译到了目标文件?

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读