Der folgende Code gibt nicht eine harte, wenn sie unter Windows 7 32bit laufen:64bit Ausnahmen in WndProc nicht still
void CTestView::OnDraw(CDC* /*pDC*/)
{
*(int*)0 = 0; // Crash
CTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
Allerdings, wenn ich versuchen, diese auf Windows 7 64bit, bekomme ich das nur im Ausgabefenster :
Erste-Chance-Ausnahme bei 0x13929384 in Test.exe: 0xC0000005: Zugriffs Verletzung Schreibort 0x00000000.
erste Chance Ausnahme bei 0x77c6ee42 in Test.exe: 0xC0150010: Der Aktivierungskontext deaktiviert wird für den aktuellen Thread der Ausführung nicht aktiv ist.
Was ist der Grund dafür? Ich weiß, es ist eine Hardware-Ausnahme (http://msdn.microsoft.com/en-us/library/aa363082.aspx), aber warum der Unterschied, wenn unter 32bit und 64bit lief? Und was kann ich tun, um diese Art von Fehlern richtig zu behandeln? Weil sie wirklich gefangen und repariert werden sollten, im Gegensatz zu dem, was momentan passiert, das Windows nur weiter Nachrichten an die Anwendung pumpt und es laufen lässt (so dass der Benutzer und die Entwickler sich völlig nicht bewusst sind, dass irgendwelche Probleme tatsächlich aufgetreten sind).
Update: Unsere regelmäßige Crash-Reporting-Software verwendet SetUnhandledExceptionFilter
aber nicht auf x64 für Hardware-Ausnahmen in einer WndProc genannt bekommt. Hat jemand irgendwelche Informationen dazu oder einen Workaround?
Update2: ich das Problem bei Microsoft Connect berichtet haben:
https://connect.microsoft.com/VisualStudio/feedback/details/550944/hardware-exceptions-on-x64-machines-are-silently-caught-in-wndproc-messages
Ich nehme nicht nur für 64-Bit-Kompilierung eine Option? – jalf
Kompilieren für x64 ist nicht wirklich eine Option, unser Quellcode besteht aus ungefähr 1 Millionen Zeilen Code, mit einer beträchtlichen Menge an Assembler. Kombinieren Sie das mit den zusätzlichen Kosten für die Ausführung von zwei separaten Builds über QA usw. –
Siehe auch den Abschnitt Anmerkungen von [WindowProc Callback-Funktion] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633573% 28v = vs.85% 29.aspx) – wimh