Questo è pazzesco. Ha iniziato a succedere nel mio progetto principale, quindi ho creato un piccolo progetto campione nuovo di zecca per riprodurlo e abbastanza sicuro .. Non succede in un progetto di esempio che ho creato che è solo una app per console Win32.VS2008 C++ Violazione di accesso MFC SOLO quando si passa alla modalità di debug
Sto eseguendo su Win7x64, se questo è importante. VS2008 SP1.
Ecco qui. Creo una piccola app di dialogo con un pulsante. Inserire un punto di interruzione nella funzione di gestione per quel pulsante. La funzione di gestione dei pulsanti è simile al seguente:
void CTestProjectDlg::OnBnClickedButton1()
{
int i;
i = 2; // < breakpoint here
i = 3;
}
Fare clic sul pulsante, premere il punto di interruzione. F10 to step e boom: "Eccezione di prima volta a 0x0398f77b in TestProject.exe: 0xC0000005: violazione di accesso."
Mi dà la possibilità di interrompere o continuare. Se continuo, lo colpisce di nuovo, solo "First Chance". Sì, ho verificato tale eccezione nel debug-> Exceptions dlg.
Se si interrompe, lo stack di chiamate mostra solo la riga in cui si trova il punto di interruzione. Se I F10 di nuovo .. Ricevo di nuovo l'eccezione, solo ora il callstack mi mostra nella funzione _AfxDispatchCmdMsg() e il mio originale OnBnClickedButton1() non si trova più nel callstack.
Non importa dove ho inserito il punto di interruzione.
Se, invece di F10, continuo solo con F5, funziona normalmente.
Ora .. se creo una versione di rilascio ed eseguo in modalità di debug: ho raggiunto il punto di interruzione e tutti i puntatori, i valori delle variabili sembrano normali. F10, e questi si trasformano in spazzatura. Il puntatore è ora zero. L'm_csHello è ora
Tuttavia, in modalità di rilascio, non viene rilevata un'eccezione e tutto funziona correttamente. La stringa "Hello World viene visualizzata nella finestra di dialogo come dovrebbe."
Ho fatto una richiesta per vedere se alcune patch sono state installate sulla mia scatola dal reparto IT negli ultimi due giorni. .? accadendo 2 giorni fa
Cosa pensi sia VS2008 danneggiato
Grazie
Edit:?.. Informazioni aggiuntive Questo non succede se io costruisco/debug la piattaforma x64 Solo per Win32..
Ho anche dato un'occhiata a tutti gli hotfix/aggiornamenti di sicurezza per VS2008 sulla scatola. sono
Infine, ho messo il progetto su una macchina diversa, che non è stato aggiornato negli ultimi 2-3 settimane. Funziona trovare lì, e ha gli stessi aggiornamenti VS installati.
Ho anche modificato il codice che viene calpestato per lo scopo di questo post. .. Si tratta di un semplice compito intero, senza MFC coinvolto.
Al momento sono nel mezzo della reinstallazione di VS2008.
Avete collegato il controllo (diciamo IDC_BUTTON1) come ON_BN_CLICKED (IDC2_BUTTON1, OnBnClcikedCutton1)? Potrebbe essere un problema. – Sunscreen
Sì. È così che arriva al punto di interruzione, se capisco la tua domanda. – HotOil
Nel codice, da qualche parte l'inizio è necessario collegare il controllo della vostra finestra di dialogo per la funzione rlated: BEGIN_MESSAGE_MAP (CTestProjectDlg, CDialog) ... ON_BN_CLICKED (IDC2_BUTTON1, OnBnClcikedCutton1) Puoi cercare il tuo codice cpp per "ON_BN_CLICKED"? È qui? – Sunscreen