Frage

Dies ist der Tag seltsam Verhalten.

Wir haben ein Win32-Projekt gemacht mit Delphi 2007, der Host für das .NET-runtime und ruft in .NET zeigen neue Formen, als Teil einer übergangszeit.

Vor kurzem haben wir begonnen zu erleben Ausnahmen an scheinbar zufälligen Orten und Punkte unseres Codes:Arithmetischer überlauf-oder Unterlauf.

Der stack-trace von einem dieser sieht wie folgt aus:

at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.RunDialog(Form form)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at Gatsoft.Gat.UI.Windows.Forms.Remanaging.RemanageForm.DelphiOpenInNewMode(String employeeCode, String departmentCode, DateTime date) in C:\Dev\VS.NET\Gatsoft\Gatsoft.Gat.UI.Windows\Forms\Remanaging\RemanageForm.Delphi.cs:line 67

In der Visual Studio-Lösung, die eine äußerst class libraries (ie.zieht in allen hinweisen, die es können), hat einen speziellen debug-Programm, gezielt für die Delphi-Projekt ausgegeben.Dies ermöglicht es uns, zu Debuggen .NET-code aus Visual Studio, obwohl der Hauptteil des Programms ist in Delphi geschrieben.

Das problem tritt nur auf, wenn Sie von den debugger, nicht, wenn wir führen Sie einfach die exe-Datei direkt (entweder über den explorer, Verknüpfungen oder sogar Strg+F5 in Visual Studio).

Es gibt anscheinend keine spyware auf dem Rechner (wie angedeutet durch diese).

Alle anderen Dinge, die wir überprüfen können?


Edit: Es sieht aus wie das .NET-debugger ermöglicht das SNaN Fahnen, und der Delphi-debugger funktioniert nicht.Wir werden dies weiter verfolgen, aber jetzt werde ich akzeptieren @Lorenzo Boccaccia's Antwort.

Offenbar Gelöst

Ok, es sieht aus wie wir haben schließlich nagelte dieses problem.Das problem begann, auftreten, ohne dass der debugger als auch für unsere Tester, also mussten wir priorisieren das problem Weg.

Schließlich fanden wir eine gemeinsame Problem mit den Maschinen, die das problem hatten, sind Sie Dell Länge D620 laptops mit einer NVIDIA-Quadro-NVS-110M, mit einem alten Treiber von einem system-image verwendet, die für die Bereitstellung des laptops, from back in 2006.

Ich fand einen post auf dem web, wenn ich verloren die url, wenn ich neu gestartet, um die Anzeige zu aktualisieren Treiber, der hatte einen .NET-service-Absturz, vor allem, wenn die Maschine beschäftigt war, etwas auf dem Bildschirm.Eine Möglichkeit, zu reproduzieren sein problem war, dass Sie zum öffnen einer Eingabeaufforderung zu C:\ und tun ein DIR /S nur Kraft einer massiven Menge von Bildschirm-updates, die auslösen würde, die den Absturz.

Er hatte auch eine NVIDIA-Grafikkarte.

Das problem auf meinem Rechner aufgetreten, etwa alle 2-4 startups in unserem Programm, aber nach der Aktualisierung der video Fahrer ich habe 123 erfolgreichen Start-UPS ohne Probleme.(BTW, kann ich empfehlen AutoHotKey für solche Dinge).

So wie es aussieht haben wir den Schuldigen gefunden, eine alte/buggy NVIDIA Treiber.

Aktualisiert, diese Frage so, dass da jemand vielleicht in der Zukunft etwas Zeit sparen.

Nun, wenn Sie mich entschuldigen, ich werde Weinen in einer Ecke.

Wie verhext!

Muss ich habe es wie verhext.Kaum hatte ich das oben geschrieben update, als ein Kollege laptop gescheitert, nach der Aktualisierung der video Fahrer.

Immer noch, ich bin zuversichtlich, dass es ein problem außerhalb unserer Anwendung, jetzt, also, es bleibt nur, um herauszufinden, welche spezifischen Dinge zu aktualisieren.


Weitere updates:Ok, mein Rechner ist nun offenbar fest, nicht so mit meinen Kollegen-Maschine.So weit, wir habe aktualisiert das BIOS, Chipsatz-Treiber, und zurzeit SP3 für XP ist auf dem Weg in.

Ein burn-in-test durchgeführt werden wird, heute Abend, wenn die app verlassen wird, übernachtung anfahren, als das problem aufgetaucht, entweder während des Starts oder beim ersten mal einige WinForms .NET-code ausgeführt wurde.Diese app ist hauptsächlich eine Delphi-Win32-app, aber es Gastgeber der .NET-runtime, und das problem scheint verwandt zu sein .NET-code.Wenn wir "boot".NET-runtime, die problem auftreten können, oder wenn wir das Feuer der ersten .NETTO-Fenster von Win32 dann kann es auch angezeigt.


Statistisch gesehen bin ich bereit zu geben Sie diesen code jetzt.Im Laufe der Nacht wird die Anwendung gestartet wurde, 3051 mal ohne Fehler in der Erwägung, bevor ich die Aktualisierung der video Fahrer krachte es jeden 2-4 mal.

Berührte Sie und fand(!/?)

Das bug-fixing Tortur fühlt sich an wie der Gang zum Arzt, wo das folgende Gespräch folgt:

Doc: Does this hurt?
Me: No...
Doc: What about now?

Habe ich stieß und stieß die Anwendung und schließlich ich glaube, ich habe etwas gefunden haben wir eingeführt, das dieses problem.

In unserer app veranstalten wir das .NET-runtime, die von Delphi 2007 Win32-Anwendung, und in unserem Klebstoff-code haben wir die folgende Zeile ein (jetzt):

  rc := CorBindToRuntimeEx('v2.0.50727', 'wks',
  STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN or STARTUP_CONCURRENT_GC,
  @clsid, @iid, UnkRuntimeEngine);

Die beiden Konstanten in der Mitte war ursprünglich nur eine 0, was bedeutet, wählen Sie die Standardeinstellungen.Diese änderung wurde eingeführt, vor ein paar Monaten, und das problem wurde langsam krochen Sie auf uns nach dieser.Die änderung wurde eingeführt, um Anreize für die AMEISEN profiler laden unsere Win32-Anwendung + gehostet .NET-runtime, um zu tun, performance-profiling und die Veränderungen, die wir eingeführt, damals geschafft.Darüber hinaus kann das problem mit arithmetischen überlauf/Unterlauf langsam immer schlimmer, so dass ich Wette, das problem erscheinen nicht, für eine Weile nach der änderung, so war es nicht zurückzuführen auf die änderungen, die wir gemacht haben.

Auch, da wir nur (Zitat) sah das problem beim Durchlaufen des Debuggers, dachten wir, dass etwas falsch war mit Visual Studio und/oder Delphi.

Jedenfalls statistisch nun, mit einem browser auf einem Bildschirm tun, wiederholt das scrollen nach oben und unten, ausgelöst durch ein javascript (anscheinend erforderlich, um die zum auslösen des bug), dann habe ich in der Lage gewesen, um erfolgreich zu starten die Anwendung 726 mal mit einer 0 in der Aufforderung, und er abstürzt 5 von 17 mal mit zwei Konstanten gibt.

Doc: Does this hurt?

Und lassen Sie uns nicht zu erkennen, wer diese änderung vorgenommen, in den ersten Platz.Ich bin sicher, der Täter gelassen werden will anonym... Husten

War es hilfreich?

Lösung

eine Debug-Version einer verknüpften DLL mit Signal nan Unterstützung kompiliert werden kann, finden Sie unter http://blogs.msdn.com/oldnewthing/archive/2008/07/02/8679191.aspx ein Beispiel für dieses Problem.

, dass Heisenbug durch nicht initialisierte Variablen verursacht wurde, hier könnte es eine verknüpfte DLL wird, die das SNaN Merkmal der CPU und zu vergessen, sie zu deaktivieren bei der Rückkehr

Andere Tipps

Haben die Fehler treten immer noch auftreten, wenn Sie den Debugger nach dem Starten der Anwendung an?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top