2016-07-19 1 views
0

288 회 반복을 실행하는 C++ 코드가 있고 288 회 반복을 완료하는 데 1 시간이 걸립니다. 때로는 프로그램이 처음 288 일 이후에 충돌하고 때로는 총 8 회의 실행 중 여섯 번째 실행 후에 충돌합니다.런타임 중에 오류를 일으키는 코드 줄을 식별하는 방법

프로그램이 충돌하는 것을보기 위해 8 시간을 기다리는 대신이 코드가 충돌하는 곳을 알 수있는 방법이 있는지 궁금합니다. 디버거 모드에서 실행할 수 있지만 디버거는 프로그램이 정상적인 명령 프롬프트 인터페이스에서 실행되면 충돌하지 않는 지점에서 충돌하는 것을 보여줍니다.

모든 의견을 환영합니다. 나는이 무작위 추락을 일으키는 것을 모른 채 8 시간을 기다리는 것에 지쳤다. 어쩌면이 오류가 발생한 것으로 의심되는 줄에 중단 점을 사용해야합니까?

답변

0

어떤 프로그래밍 언어인지 알지 못하고 더 자세한 정보를 제공하기가 어렵습니다.

1). 충돌을 일으키는 원인을 결정하십시오. 동일한 입력 데이터 세트로 매번 동일한 위치에서 충돌이 발생하면 입력 데이터의 일부 조건이 발생할 가능성이 높습니다. 변수를 사용하여 어떤 반복을 기록하고 데이터를 조회하고 각 반복이 서로 독립적이라고 가정하고 해당 반복을 호출 할 수 있습니다.

2). 코드가 데이터를 처리하는 방법과 관련이있는 데이터와 다른 데이터를 사용하여 다른 장소를 충돌시킵니다. 예를 들어 다른 컴퓨터에서 데이터를 읽으려고하면 시간이 초과됩니까? 메모리가 부족합니까?

3). 프로세스에 '스마트'를 추가하여 코드가 충돌하여 예상치 못한 상황을 확인하고보고 할 수 있습니다.

질문에 대답하는 데 도움이되는 정보. - 어떤 프로그래밍 언어/툴. - 계산에서 제 3 자 API 또는 자체 코드 만 호출합니까? - 귀하가 계산해야하는 데이터 (예 : IE 데이터베이스, 파일 등)를 처리해야합니까? -이 정보의 읽기를 처리하여 읽지 못하면 알림을 받고 대신 정상적으로 처리하도록하십시오. 그냥 충돌하는거야?

0

귀하의 질문은 매우 일반적이지만, 12 년간의 프로그래밍에서 보았던 것과 같이 C++과 같은 프로그래밍 언어를 사용하고있는 것으로 보입니다. 메모리 누수 또는 버퍼 오버 플로우가 발생할 가능성이 있으며 충돌은 RAM 및/또는 멀티 스레드 타이밍에 따라 언제 어디서나 발생할 수 있습니다.

C++ 추측이 맞으면 Application Verifier을 살펴 보는 것이 좋습니다. 을 실행하고 + 을 입력하고 appverif을 입력하십시오. 이미 컴퓨터에 설치되어있을 수 있습니다.

응용 프로그램을 추가하고 기본 사항 그룹의 모든 항목을 확인하십시오. 설정을 저장하십시오. 그런 다음 디버거에서 프로그램을 실행하십시오. 디버거가 첫 번째 메모리 누수를 감지하면 훨씬 이전에 충돌이 발생할 수 있습니다.

Settings on a sample program

마이크로 소프트 디버거 는 응용 프로그램 검증 작업을하는 특별한 명령 !avrf을 가지고 있지만, 당신은 또한 다른 디버거에서 더 나은 결과를 얻을 수 있습니다.

관련 문제