2010-07-20 11 views
3

"hello world"애플리케이션 (C++)에서 totalview를 실행 했으므로 어셈블리 코드 만 볼 수 있습니다.totalview에서 소스 코드를 보려면 어떻게해야합니까?

소스 코드를보기 위해 설정해야하는 설정/플래그가 있습니까? 메뉴 ->보기 -> 소스 As-> 소스가 나를 위해 작동하지 않습니다.

디버깅하려는 응용 프로그램은 디버거를 작동시키고 실행하기 위해 "Hello World"응용 프로그램 인 < <입니다.

답변

6

간단한 것들로 시작하자.

응용 프로그램을 '-g'디버깅 플래그로 컴파일 했습니까? 디버거는 컴파일러에 의존하여 심볼 테이블과 행 번호 테이블을 제공하여 실행 파일에서 일어나는 일을 소스 코드에 매핑합니다. -g 플래그가 없으면 (또는 응용 프로그램을 제거한 경우) 해당 정보가 표시되지 않고 어셈블리 디버깅이 최선의 결과를 얻을 수 있습니다.

-g로 컴파일 한 경우 소스와 실행 파일이 모두 같은 디렉토리에 있거나 함께 컴파일 한 이후에 이동하지 않은 경우? 컴파일러는 소스와 실행 파일의 위치가 작성 당시에 만 알고 있으므로 주위를 이동하면 디버거가 소스 코드 파일을 찾을 수없는 경우가 있습니다. 이 경우 소스 코드 검색 경로를 정의하여 도움을 주어야 할 수도 있습니다.

-g가 문제를 해결했는지 알려주십시오. 그렇지 않으면 우리는 검색 경로 등을 들여다 볼 수 있습니다.

건배, 크리스

+0

-g 거의 수정되었습니다. 내 응용 프로그램을 시작하면 (hello world가 아닌 다른 복잡한 하나) 2 개의 중단 점부터 시작합니다. 하나는 클래스의 생성자에, 다른 하나는 같은 클래스에있는 하나의 함수에 있습니다. 첫 번째 중단 점은 okey입니다. 그것은 멈추고 나는 sourecode에서 멈추는 곳을 본다. 하지만 내가 확실하게 도달 한 다음 브레이크 포인트로 달려 갈 때, 그것은 어셈블리를 보여줍니다 ... 왜 그런가요? – Jason94

2

나는 Jason94는 거의 확실하게 자신의 문제를 다른 방법으로 해결하고 있다는 것을 깨닫게하지만 난 그게 좋은 질문이기 때문에 나는이 대답을 여기에 동조 할 수있는 것이라고 상상했다.

이 특별한 경우 프로그램이 멀티 스레드인지 여부는 흥미로울 것입니다. TotalView는 멀티 스레드 프로그램을 사용하도록 설계되었으며 사용자에게 놀라운 기능을 제공합니다. 기본적으로 중단 점에 도달하는 스레드에 항상 집중하지는 않습니다. 따라서 프로그램은 실제로 다른 스레드의 두 번째 중단 점에서 중단되었을 수 있습니다.

6 개의 스레드가 있다고 가정하면 (0 - 5의 번호를 지정) 루틴에 중단 점을 설정합니다. 스레드 0은 당신이 초점을 맞추고있는 것이고 당신은 "go"를 누르십시오. 프로그램이 실행되고 스레드 4가 먼저 중단 점에 도달합니다. 기본적으로 중단 점은 중단 점에 도달하면 전체 프로세스를 중지합니다. 디버거에서 스레드 4가 중단 점에 도달했을 때 스레드 0이 있던 위치를 나타내는 어셈블리를 볼 수 있습니다. 루트 창이나 스레드 창을 검사하여 다른 스레드의 상태를 알 수 있으며 그 중 하나에 "B2"(중단 점 2)가 표시 될 수 있습니다. 그런 다음 해당 스레드를 클릭하면 TotalView가 해당 스레드로 다시 초점을 맞추고 중단 점에 앉아있는 것을 볼 수 있습니다.

왜 그렇게할까요? 다른 스레드가 중단 점에 도달했기 때문에 초점을 "찢어 버린"것이 혼란 스럽거나 당황 스럽다고 생각하기 때문입니다. 따라서 기본적으로 사용자는 스레드 포커스를 제어 할 수 있습니다.

totalview가 프로세스 창을 "이벤트 사이트"로 다시 초점을 맞추도록 지시하는 것을 변경할 수있는 환경이 있습니다. TotalView가 중단 점에주의를 집중 시키길 원한다면 설정할 수 있지만 그렇게하면 한 스레드에서 다음 스레드로 바운스 될 수 있습니다.

다른 가능성은 중단 점이 아닌 다른 이유로 인해 프로세스가 중지되었다는 것입니다.프로그램이 segfault를 했습니까? 프로세스 창의 상단에있는 상태 표시 줄을 확인하여 스레드 및 프로세스의 상태를 확인하십시오.

어쨌든 - 그냥 기록에 게시하고 싶습니다.

+0

이 환경 설정을 설정하는 방법에 대한 참조를 제공 할 수 있습니까? – Stabledog

관련 문제