2012-02-23 2 views
8

per catturare i bug di troncamento del puntatore in 64 bit, ho aggiunto lo snippet di codice menzionato here che riserva i 4GB inferiori di memoria in modo che gli allocati siano superiori a 32 bit. In un'applicazione di test MFC x64, chiamo la funzione di prenotazione per prima cosa in InitInstance(). Ho poi aggiunto un pulsante che fa semplicemente:FileDialog si blocca quando fondo 4GB pieno

CFileDialog dlg(TRUE); 
dlg.DoModal(); 

chiamata DoModal alla fine si blocca da qualche parte con uno stack in "terra di nessuno":

> 000000018000163b() 
    0000000100000024() 
    0000000000000001() 

Questo non è MFC specifico in quanto ottengo lo stesso comportamento con un FileDialog .NET. Penso che sia qualcosa fuori dalle mie mani dal momento che il file attuale FileDialog appare brevemente e poi si blocca. Sembra un'estensione della shell o qualcosa del genere ma non riesco a capire da dove provenga, dal momento che lo stack delle chiamate non aiuta, ma voglio scoprire se c'è qualcosa che posso fare!

Se rimuovo la funzione di prenotazione speciale, non si verificano più gli arresti anomali.

Perplesso!

+5

Bene, si sta lavorando, si stanno recuperando i bug puntatore. Solo non nel tuo codice. Utilizzare l'utilità AutoRuns di SysInternals per disabilitare le estensioni della shell. –

+0

Cosa succede se si prova la stessa cosa con 'GetOpenFileName' (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646927%28v=vs.85%29.aspx)? + Ton site web est down ... – ixe013

+0

Puoi verificare lo spazio degli indirizzi del modulo in cui si trova, o lo stack è stato distrutto? –

risposta

1

Non riesco a riprodurre questo arresto. Ho creato un progetto a 64 bit, aggiunto la prenotazione di 4 GB e aperto una finestra di dialogo all'interno di esso. Nessun incidente.

O la mia risposta non corrisponde alla tua o c'è qualcosa nel tuo sistema che è diverso. Dovresti pubblicare il tuo progetto in modo che possiamo rimuovere una delle variabili.

Purtroppo non ricordo cosa sia un TppWorkerThread.

Pubblica il tuo progetto: tutti i file di origine, i file di risorse, i file .vcxproj e .sln. Quindi possiamo indagare.

+0

Bruce mi dà un'idea: sei sicuro che non ci siano altre DLL caricate nel tuo processo? Conosco molte estensioni che si caricano nel dialogo, potrebbero essere quelle che lo abbattono. – ixe013

1

dare un seguito a questo problema, abbiamo scoperto che un'estensione della shell installato dal 360 sdk causa il problema (xeshlext.dll)

+0

Il mio seguito. Abbiamo trovato un servizio interno che era in conflitto con l'estensione della shell 360 e ha causato l'arresto anomalo. L'aggiornamento all'ultima versione ha risolto tutto. Scusa per averti disturbato! –