我想看一个变量S的值,把断点设在这一行上,断点在oninitdialog()之后,对话框就出来了,我感觉对话框一出来debug的工具都不能用了,右键quickwatch是灰色的,watch窗口也不能输入变量。如果在oninitdialog()里,对话框出来之前,quickwatch就可以查看变量值,watch也可以输入,这是怎么回事?

解决方案 »

  1.   

    那是因为你的程序没有走到你的断点处. 只要程序没有结束,就能debug.
      

  2.   


    没有走到断点处?为什么?不是吧?难道执行完oninitdialog()对话框一出来就停在那里了?
      

  3.   

    比如说你的断点设在LButtonDown()里面,如果你不点鼠标左踺,永远也不会走到断点的.
      

  4.   

    比如说你的断点设在LButtonDown()里面,如果你不点鼠标左踺,永远也不会走到断点的.
    -------没有这样的情况。应该是可以走到断点的,程序的代码是这样的:BOOL CMySocketDlg::OnInitDialog()
    {
    // TODO: Add extra initialization here
    count=0;
    m_list.InsertColumn(0,"消息");
    m_list.SetColumnWidth(0,435);
    m_edit.SetLimitText(99); serv.sin_addr.s_addr=htonl(INADDR_ANY);
    serv.sin_family=AF_INET;
    serv.sin_port=5000;
    addrlen=sizeof(serv);
    m_button.EnableWindow(FALSE); sock=socket(AF_INET,SOCK_STREAM,0);
    if(bind(sock,(sockaddr*)&serv,sizeof(serv)))
    {
    m_edit.SetWindowText("绑定错误");
    }else
    {
    m_edit.SetWindowText("服务器创建成功");
    listen(sock,5);
    AfxBeginThread(&thread,0);

    }UINT thread(LPVOID p)
    {
    char buff[100];
    CSize size;
    size.cx=0;
    size.cy=30;
    int s=1;
    CMySocketDlg *dlg=(CMySocketDlg*)AfxGetApp()->GetMainWnd();
    dlg->msgsock=accept(dlg->sock,(sockaddr*)&(dlg->serv),&(dlg->addrlen));//!!!!
    if(dlg->sock==INVALID_SOCKET)
    {
    dlg->m_edit.SetWindowText("Error accept");
    }
    else
    {
    dlg->SetForegroundWindow();
    dlg->m_list.InsertItem(dlg->count++,"连接成功");
    dlg->m_list.InsertItem(dlg->count++,inet_ntoa(dlg->serv.sin_addr));
    dlg->m_list.Scroll(size);
    dlg->m_button.EnableWindow(TRUE);
    }
    while(s!=SOCKET_ERROR)//我设置断点的行
    { s=recv(dlg->msgsock,buff,100,0);
    dlg->SetForegroundWindow();
    if(s!=SOCKET_ERROR)
    {
    dlg->m_list.InsertItem(dlg->count++,buff);
    dlg->m_list.Scroll(size); } }
    send(dlg->msgsock,"Disconnected",100,0);
    dlg->m_list.InsertItem(dlg->count++,"Disconnected");
    dlg->m_list.Scroll(size);
    dlg->msgsock=NULL;
    dlg->m_button.EnableWindow(FALSE);
    closesocket(dlg->msgsock); AfxEndThread(0);
    return 0;

    }
      

  5.   


    调试执行(F5)
    --------
    就是调试执行然后对话框跳出来什么都不能用,断点设置在oninitdialog内时显示count值是0,现在watch里面显示symbol “count” not find。
      

  6.   

    count只是个局部变量,出了函数体以后就自动销毁了