문제

C#에는 소켓 연결을 관리하고 실패하려고 시도하지만 동일한 응용 프로그램이 비주얼 스튜디오에 첨부 된 후에도 성공한 데스크탑 응용 프로그램이 있습니다.

어떻게 디버깅 할 수 있습니까?

도움이 되었습니까?

해결책

이것은 타이밍의 전형적인 예입니다.

디버거에서 작동하는 경우 코드를 약간 다시 얻으려면이를 처리해야합니다.

이제 앱인 경우 클라이언트로부터 연결을 수신하고 각 연결에 대한 스레드를 스폰하려는 서버 소켓 인 경우 하나의 스레드에서 연결을 관리하려면 select ()를 사용하는 것을 고려해야 할 수도 있습니다.

다른 팁

디버거를 부착하는 타이밍 문제도 코드가 약간 느려질 것이며 이는 레이스 조건이 발생하지 않을 수 있음을 의미합니다.

디버그는 응용 프로그램에 로깅 코드를 추가하려고합니다. 저는 개인적으로 사용합니다. log4net

C#에서 코딩하는 것처럼 Malloc 등에 문제가 없어야합니다.

웹 앱을 실행중인 경우 VS의 Cassini 웹 서버와 배포중인 Webserver에 차이가있을 수도 있습니다.

일반적으로 타이밍 문제. 관련 스레드가 있습니까? C/C ++이라면 메모리 관리 버그가 작동하는 방식으로 인해 많은 이유가있을 수 있습니다.

독립형과 달리 컴파일러에서 실행할 때 기본값이 다른 변수가있을 수 있습니다. 스레드가 관련된 경우 인종 조건이 또 다른 아이디어 일 수 있습니다.

Malloc 또는 New를 통해 RAM을 할당하는 경우 메모리를 사용하기 전에 메모리가 올바르게 초기화되어 있는지 확인하십시오.

우리는 실제로 비슷한 문제를 겪었습니다. 타이밍은 이것의 중요한 부분입니다. 코드에 No-OPS를 던지는 것 (디버깅 된 코드가있는 기본 차이).

소켓 프로그래밍을 사용하면 VisualStudio.net과 디버깅하는 것이 추가 응용 프로그램을 갖는 것과 같습니다. 우리는 Application.Doevents ()를 호출하여 구성 요소가 호흡 (예 : 자체 이벤트를 처리)하지 않으면 실패 할 물건이 있음을 발견했습니다.

Visual Studio가 응용 프로그램에 첨부되면 CLR과 JIT는 디버깅을 활성화하기 위해 미묘한 런타임 차이를 가지고 있습니다. 예를 들어 쓰레기 수집은 다릅니다.

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

디버거에서 부작용으로 속성을보고 있기 때문일 수 있습니다. 여기 다른 답변이 더 가능성이 높지만 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top