문제

LibreOffice 인쇄 프로세스에 추가 기능을 구현하려고합니다 (일부 특별 정보는 모든 인쇄 된 페이지의 여백에 자동으로 추가되어야 함). 나는 LibreOffice 4.0.4 및 그놈 2.28으로 Rhel 6.4를 사용하고 있습니다.

내 목적은 libreoffice 및 시스템 구성 요소 간의 데이터 흐름을 연구하고 인쇄에 대한 책임이있는 소스 코드를 결정하는 것입니다. 그런 다음 코드의 이러한 부분을 수정해야합니다.

이제는 소스 코드 연구 방법에 대한 조언이 필요합니다. 나는 많은 도구와 내 관점에서 볼 때 :

  1. strace는 매우 낮은 수준으로 보입니다.
  2. gprof는 "-pg"cflags로 다시 컴파일 된 바이너리가 필요합니다. libreoffice로 그것을하는 방법을 모르게하지 마십시오.
  3. systemtap는 syscalls 만 프로브 할 수 있습니까?
  4. callgrind + Gprof2Dot는 함께 꽤 좋지만 이상한 결과를 수행합니다 (아래 참조).
  5. 예를 들어 callgrind 시각화를 사용하여 Gprof2Dot 출력의 통화 그래프입니다. 이러한 명령으로 callgrind를 시작했습니다.

    valgrind --tool=callgrind --dump-instr=yes --simulate-cache=yes --collect-jumps=yes /usr/lib64/libreoffice/program/soffice --writer
    
    .

    및 4 개의 출력 파일을 받았습니다.

    -rw-------.   1 root  root          0 Jan  9 21:04 callgrind.out.29808
    -rw-------.   1 root  root     427196 Jan  9 21:04 callgrind.out.29809
    -rw-------.   1 root  root     482134 Jan  9 21:04 callgrind.out.29811
    -rw-------.   1 root  root     521713 Jan  9 21:04 callgrind.out.29812
    
    .

    마지막 하나 (PID 29812)는 실행중인 libreoffice Writer GUI 응용 프로그램 (i straceps aux로 결정됨)에 해당합니다. ctrl + p 및 ok 버튼을 누릅니다. 그런 다음 로그에서 프로세스 초기화를 인쇄 할 책임이있는 기능을보기 위해 응용 프로그램을 닫았습니다.

    callgrind 출력은이 답변에 따라 Gprof2Dot 도구로 처리되었습니다. 불행히도, 나는 내가 관심있는 행동이나 콜 그래프와 그대로있는 그림을 볼 수 없습니다.

    그러한 문제를 해결하는 적절한 방법에 대한 모든 정보는 감사 할 것입니다. 고맙습니다.

    여기에 이미지 설명

도움이 되었습니까?

해결책

이 문제를 해결하는 적절한 방법은 libreoffice가 오픈 소스 인 것을 기억하는 것입니다.전체 소스 코드가 문서화되고 docs.libreoffice.org 에서 문서를 찾아 볼 수 있습니다.어려운 방법을하지 마십시오.)

프린터 설정 대화 상자가 LibreOffice 관련 대화 상자가 아니라 OS에서 제공하는 것을 기억하십시오.

다른 팁

원하는 것은 소스 코드를 식별하는 도구입니다. 테스트 적용 범위 (TC) 도구는이 정보를 제공 할 수 있습니다.

프로그램이 실행될 때 어떤 코드 조각이 실행되는 코드 조각을 결정하는 것입니다. 코드 영역 집합으로 수집하는 것으로 생각하십시오. 일반적으로 TC 도구는 (대화식 / 단위 / 통합 / 시스템) 테스트와 함께 테스트가 얼마나 효과적 이지는지를 결정합니다. 작은 양의 코드 만 실행되는 경우 (TC 도구에서 검출 된 바와 같이) 테스트는 효과가 없거나 불완전한 것으로 해석됩니다. 큰 백분율이 다루어지면 제품을 운송하기위한 합리적인 정당화 (모든 테스트가 통과 한 모든 테스트가 가정)를위한 합리적인 정당화가 좋습니다.

그러나 TC 도구를 사용하여 기능을 구현하는 코드를 찾을 수 있습니다. 먼저, 관심있는 기능을 행사하고 TC 데이터를 수집하기 위해 일부 테스트 (또는 수동으로 소프트웨어를 수동으로 드라이브)를 실행합니다. 이 기능이 사용되는 경우 행사 된 모든 코드 세트를 알려줍니다. 그것은 당신에게 관심있는 강령의 과대화입니다. 그런 다음 프로그램을 연습하여 유사한 활동을하도록 요청하지만이 기능은 수행되지 않습니다. 이렇게하면이 기능을 구현하지 않는 코드 집합을 식별합니다. 피쳐를 지원하는 데 더 집중된 코드를 결정하지 않고 코드 연습 기능과 기능을 결정하지 않고 설정된 코드를 계산합니다.

더 많은 연습 기능을 실행하여 자연스럽게 경계를 얻을 수 있으며 해당 집합의 노동 조합을 통해 더 많은 운동을하지 않고 컴퓨팅 차이가 있습니다.

C ++, 예를 들어 "GCOV"를위한 TC 도구가 있습니다. 그 중 대부분은 그 결과를 통해 그러한 세트 차이를 계산하거나 돕지 않을 것입니다. 많은 TC 도구는 덮개를 조작하는 데 도움이되지 않는 것 같습니다. (내 회사는 C ++을 포함한 Compute-Coverage-set-differentences를 포함 하여이 기능을 갖춘 TC 도구의 가족을 만듭니다.

실제로 추출 관련 코드를 원한다면, TC 도구는 그렇게하지 않습니다. 소스 파일에서 텍스트 영역을 지정하여 어떤 코드를 알려주는 코드를 알려줍니다. 대부분의 테스트 범위 도구는 텍스트 영역으로 라인 을 덮어 씌우는 것만이보고합니다. 이것은 부분적으로 기계가 많은 테스트 적용 도구 사용이 컴파일러가 기록 된 줄 번호로 제한되기 때문입니다.

그러나 파일 / 회선 / 컬럼을 종료하는 파일 / 회선 / 열로 시작하여 텍스트 영역을보고하는 데 정확한 테스트 커버리지 도구를 가질 수 있습니다 (AHEM, 내 회사의 도구 가이 작업을 수행하는 경우). 이 정보를 통해 소스 파일을 읽는 간단한 프로그램을 구축하고 문자 그대로 실행 된 코드를 추출하는 것은 매우 간단합니다. (추출 된 코드가 잘 구성된 프로그램이라는 의미는 아닙니다! 예를 들어, 데이터 선언은 필요한 조각에 포함되지 않음이 필요합니다.

op는 그가 그러한 코드로 무엇을 할 것인지 말하지 않으므로 조각 집합이 필요한 모든 일 수 있습니다. 그가 코드와 필요한 선언을 추출하려는 경우, 필요한 선언을 결정할 수있는보다 정교한 도구가 필요합니다. 전체 파서 및 소스 코드에 대한 이름 분석기가있는 프로그램 변환 도구는 이것에 필요한 기능을 제공 할 수 있습니다. 이것은 Ad hoc 추출 텍스트 추출을 사용하여 테스트 적용 도구보다는 사용하기가 상당히 더 복잡합니다.

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