Frage

Es ist eine Desktop-Anwendung in c # geschrieben versuchen, eine Socket-Verbindung zu verwalten und andernfalls aber erfolgreich zu sein nach derselben Anwendung Visual Studio angebracht ist.

Wie kann es debuggt werden?

War es hilfreich?

Lösung

Dies ist ein klassisches Beispiel für Timing.

Wenn es im Debugger funktioniert, dann bedeutet dies, Sie haben Ihren Code ein wenig neu zu Faktor, dies zu umgehen.

Nun, wenn Sie App ist ein Server-Socket sind, die für jede dieser Verbindungen Verbindungen von Client und versucht, zum Laichen einen Thread erhält, müssen Sie unter Umständen mit select () betrachten Verbindungen mit in einem Thread zu verwalten.

Andere Tipps

würde ich Timing-Probleme sagen zu den Debugger mit leicht den Code angebracht wird sich verlangsamen, was, dass eine Race-Bedingung bedeuten könnte, wird nicht auftreten.

Zum Debuggen es versuchen, einige Logging-Code zu Ihrer Anwendung hinzuzufügen, verwende ich persönlich log4net

Sie sollten nicht haben und Probleme mit malloc und dergleichen, wie Sie in C # codieren.

Wenn Sie einen Web-App ausgeführt werden, es könnte auch sein, gibt es einen Unterschied in den Cassini-Webserver in VS und den von Ihnen bereitstellen.

Normalerweise Fragen Timing. Gibt es-Threads beteiligt? Wenn C / C ++, dann eine Menge Gründe, es könnte sein, weil, wie Memory-Management-Fehler verhalten könnten.

Vielleicht haben Sie Variablen, deren Standardwerte unterschiedlich sind, wenn sie unter dem Compiler ausgeführt wird, im Gegensatz zu Standalone. Race Conditions vielleicht eine andere Idee, wenn es beteiligt Threads.

Wenn Sie RAM über malloc oder neu sind die Zuteilung, stellen Sie sicher, dass der Speicher vor richtig initialisiert wird, es zu benutzen.

Wir haben tatsächlich ein ähnliches Problem aufgetreten. Timing ist ein wichtiger Teil davon. Sowie keine-ops in den Code (primärer Unterschied w / debuggt Code) zu werfen.

Mit Socket-Programmierung, so scheint es, als ob das Debuggen w / VisualStudio.Net ist wie zusätzliche Application.DoEvents mit () Anrufe. Wir haben herausgefunden, dass wir Sachen, die (nicht-Debugging) wird scheitern, wenn wir nicht die Komponente atmen lassen (zum Beispiel seine eigene Ereignisse behandeln) durch Application.DoEvents () aufrufen.

Wenn Visual Studio auf Ihre Anwendung legt, haben die CLR und JIT subtile Laufzeitunterschiede Debugging zu ermöglichen. Die Garbage-Collection zum Beispiel ist anders.

http://stupiddumbguy.blogspot.com /2008/05/net-garbage-collection-behavior-for.html

Es könnte sein, weil Sie Eigenschaften mit Nebenwirkungen in Ihrem Debugger gerade anschauen. Obwohl die anderen Antworten hier sind eher ...

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