0

Visual Studio 2012 솔루션에는 C 프로젝트와 Fortran (Intel Composer XE 2013 사용)이 포함되어 있습니다. 필자는 Fortran 코드에서 iso_c_binding 유틸리티를 사용하여 C 코드를 자주 호출하지만 C 코드를 효과적으로 디버깅 할 수 없다는 것을 알았습니다. 포트란 코드를 디버깅하는 동안, 변수의 내용을 잘 볼 수는 있지만, C 코드를 한 번 들으면 갑자기 정신 상태가 나 빠진다. 대부분의 변수는 정의되지 않았다고 주장합니다. 함수에 전달 된 모든 값에 잘못된 값이 포함됩니다 (그러나 여전히 포인터와 객체/POD는 구분됩니다).다른 Visual Studio 프로젝트에서 Visual Studio C 프로그램 디버깅

나는 여전히 코드를 단계별로 실행할 수 있습니다. 예상되는 실행 순서를 대부분 따르는 것 같지만 때로는 약간 뛰어 넘기 때문에 gdb로 Linux에서 컴파일러 최적화 코드를 디버깅하는 것으로 익숙합니다.

C 및 Fortran 프로젝트가있는 별도의 솔루션이 있습니다. 두 가지 모두 첫 번째 솔루션과 동일한 C 프로젝트를 호출하며 두 경우 모두 첫 번째 솔루션에서 C 프로젝트로 들어갈 때까지 다시 디버그 할 수 있습니다.이 시점에서 동일한 문제가 발생합니다.

내가 뭘 잘못하고 있니?

+0

머리에 못을 박은 것처럼 들립니다. VC는 로컬 변수와 매개 변수를 레지스터 등으로 최적화 할 때 상당히 공격적입니다. 디버그 기호가 있으면 각 행에서 어떤 일이 일어나는지 최소한 보여줄 수있는 디스 어셈블리 창을 통해 디버그를 제안 할 수 있습니다. – WhozCraig

+0

모든 최적화가 꺼져 있습니까? – kotlomoy

+0

@kotlomoy, 어떤 최적화 속성이 설정되었는지에 관계없이이 문제가 발생합니다. 확인해야 할 다른 사항이 있으면 알려주십시오. – patrickvacek

답변

2

이것은 최적화 된 코드를 디버깅하기위한 표준 박쥐 신호입니다. Fortran 코드가 C 코드의 최적화되지 않은 디버그 빌드로 연결되도록 빌드 설정을 재정렬해야합니다.

어떻게 처음부터 잘못되었는지에 대한 귀하의 질문에 빵 부스러기가 없습니다. 어떤 라이브러리가 Fortran 프로그램에 링크되어 있는지 확인하고 디버그 및 릴리스 빌드에서 C 프로젝트에 대해 생성 된 개별 라이브러리를 볼 수 있는지 확인하십시오. 디버그 빌드로 만든 링크를 연결해야합니다.

+0

매우 혼란 스럽습니다. 이전에 최적화를 비활성화하려고 시도했지만 컴파일 또는 링크 순서에 또 다른 문제가 있다고 생각하므로 먼저 수정해야했습니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! – patrickvacek