2017-12-07 6 views
0

gcc은 프로그램 실행 중에 출력을 생성하는 런타임 분석에 사용할 수있는 bunch of options입니다. 예를 들어gcc -fprofile-arcs : 사용자 정의 RTOS에서 파일을 출력하는 방법

: 그 프로그램의 흐름 호는 계측되도록 gcc -fprofile-arcs

추가 코드입니다. 실행 중에 프로그램은 각 분기 및 호출이 몇 번 수행되었는지 기록합니다. 이 실행되거나 반환되는 횟수입니다. 우선 순위가 지원되는 생성자를 지원하는 대상에서 전역 변수의 유형으로 사용되는 클래스의 생성자, 소멸자 및 C++ 생성자 (및 소멸자)를 적절하게 처리하면 프로파일 링이 완료됩니다.

컴파일 된 프로그램이 종료되면 은 각 소스 파일에 대해 auxname.gcda이라는 파일에이 데이터를 저장합니다. 이 데이터는 프로필 지향 최적화 (-fbranch-probabilities) 또는 테스트 범위 분석 (-ftest-coverage)에 사용할 수 있습니다. 각 오브젝트 파일의 auxname은 명시 적으로 으로 지정되고 최종 실행 파일이 아닌 경우 출력 파일의 이름에서 생성 된 입니다. 그렇지 않으면 소스 파일 의 기본 이름입니다. 두 경우 모두 접미사가 제거됩니다 (예 : 입력 파일 dir/foo.c의 경우 foo.gcda , 출력 파일의 경우 dir/foo.gcda는 -o dir/foo.o로 지정됨).

은 내가 굵은 단어 상태, 리눅스/윈도우/QNX에서와 같은 메커니즘을 사용하여 데이터를 "저장"프로그램은 할 수 있도록 파일 시스템이없는 사용자 정의 C++ RTOS를 실행하고 있습니다.

질문

방법, 내가 -fprofile-arcs의 사용을 만들 수 가능하면 (또는 파일을 생성 옵션을 프로파일 링 다른 런타임의) 어떤 파일 시스템 내 사용자 정의 RTOS에를?

"writer"클래스를 제공하여 정보를 리디렉션 할 수 있습니까? 그렇다면 JTAG처럼 사용할 수있는 인터페이스를 사용하여 PC로 데이터를 스트리밍 할 수 있습니다.

디버거에 대해 말하면 gdb을 사용하고 에 대한 JTAG 연결을 사용하면이이 문제를 해결할 수 있습니까?

답변

0

나는 한 번 비슷한 것을해야했다. 나는 코드 커버리지 이후였다. 다행히도 컴파일하기 전에 소스를 인스트루먼트하고 메모리에서 부기를 수행 할 수있는 VectorCast 라이센스를 손에 넣을 수있었습니다. 계측 된 gcc 코드에 대해 스텁을 얼마나 자세히 보았는지 기억하지 못합니다.

RTOS 임베디드 환경에서 초점을 맞추는 경우 프로그램 카운터를 주기적으로 기록하고 의미있는 데이터를 수집 할 수있을만큼 오래 실행하십시오.

+0

모든 기능 입력/종료시 추적을 실행하고 싶습니다. 사실, 나는 이미'gcc -finstrument-functions'를 사용하여 이것을 할 수 있습니다. 트레이스 정보를 저장하는 내 스토리지 추상화를 생각해 내야 할 것 같습니다. – Adrian

관련 문제