문제

을 사용하는 동안 추적이,내가 발견되는 몇 가지 기능에 나열되지 않은 소스를 찾으려는 동안 그들을 넣어하기 위해 중단점입니다.이러한 기능이 나타날 것으로 보인다 볼 때 소스에서 어셈블리 형식입니다.

난 내 노인들에게 말했든지 나로 말미암아 들어가면 이 기능이라고 한 번,그것은 최적화에 의해 추적하고 나타납니다 인라인으로,따라서 볼 수 있습에 어셈블리입니다.

나의 질문은:

  1. 어떻게 이런 최적화를 통해 발생 Lauterbach?
  2. 이 유리하다??
도움이 되었습니까?

해결책

몇 가지가 있습니다.

  1. 진술에 관해 브레이크 포인트를 넣기 위해 찾으려고 노력하는 동안 소스에 나열되지 않은 기능이 거의 없다는 것을 알았습니다.", 빌드에 사용 된 다른 함수, 메모리 위치 등의 위치로 구성된 매핑 파일/맵 파일을 확인하고 최적화를 살펴 보는 것보다 기능을 찾지 못하면 [그럴 수 있습니다. 문제].

  2. 바로 지적한 바와 같이, 최적화는 Lauterbach에 의해 수행되지 않지만 컴파일러에 의해 수행됩니다. 일반적으로 O0이 가장 높은 최적화가 가능한 최적화 수준이 다릅니다. 그러나 고객에게 릴리스가있는 경우에만 사용해야합니다. 다른 최적화 레벨 O2는 디버깅에 사용해야합니다.

  3. 컴파일러에 의해 기능이 최적화 될 수 있다고 생각되면 휘발성 물질.

  4. 이것과 직접 관련이 없지만 도움이 될 수있는 다른 점은 "메모리의 영역이 어떤 영역이 파일인지"를 아는 것입니다. RAM에서 페이지가 촬영 될 때까지 중단 점을 넣을 수 없습니다 [기본적으로 시스템에 존재하는 경우 주문형 페이징과 같은 것].

도움이 되었기를 바랍니다.

-hjsblogger

다른 팁

최적화는 Lauterbach가 아닌 컴파일러에 의해 수행됩니다. 컴파일러는 어셈블리 언어 출력을 최적화하려고 시도하며, 기본 설정은 일반적으로 한 번만 호출되는 기능을 인라인 함수로 만듭니다.

테스트 목적으로 이러한 최적화를 무시하려면 컴파일러 플래그를 사용할 수 있습니다. -no_inline.

한 번만 호출되는 함수는 컴파일러에 의해 수행 될 수 있습니다.

장점은 기능 호출 (런타임, 코드 공간 및 스택 공간)의 오버 헤드를 저장하고 여전히 여러 기능으로 코드를 멋진 모듈 방식으로 작성할 수 있다는 것입니다.

디버깅 기능이 발신자와 혼합되기 때문에 디버깅이 어려워진다는 단점이 있습니다.

추적 도구의 동작을 wrt 귀하의 질문은 다소 불분명합니다.

이 있는 경우에는 함수 호출되는 찾을 수없는 소스 코드에서 그것을 가능성이기 때문이라고 합의된 기능을 위한 2 가지 이유:

  1. 인라인 함수 호출이 표시되지 않습으로 서브루틴 호출에 어셈블리 코드를 구현하는 기능입니다 방출되는 인라인에서는 점이 함수를 호출 그렇지 않으면(즉,인라인입니다)

  2. 컴파일러 inlines 귀하의 함수 호출,함수 이름을(당신이 볼 수 있었다 그것이 어셈블리에서 출력)아직도 부분의 소스 코드를 만족하고 있는지 확인하는 컴파일러를 얻고 있는 코드를 인라인 요소입니다.

하지만,컴파일러로 삽입하 신비한 함수 호출하여 내부 도우미 기능으로 생성된 코드를 구현하는 것과 같은 산술 작업은 CPU 지 않 직접 지원(정수 부서 또는 부동 소수점 연산에 대한 예).

What 의 이름은'미스터리 기능'?

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