ltrace 사용법

ltrace는 리눅스에서 사용되는 디버깅 및 프로파일링 도구로, 실행 중인 프로그램이 호출하는 라이브러리 함수를 추적하고 분석하는 기능을 제공한다. 이를 통해 소프트웨어 개발자는 프로그램의 동작과 성능을 이해하고, 잠재적인 버그를 찾거나 성능 개선을 위한 힌트를 얻을 수 있다. 이번 글에서는 ltrace의 기본적인 사용법과 몇 가지 유용한 옵션에 대해 알아본다.

기본 사용법

ltrace는 추적하려는 프로그램과 인자를 함께 지정한다.

$ ltrace ./example

주요 Option

ltrace는 다양한 옵션을 제공하여 사용자의 추적 요구에 맞게 설정할 수 있다.

  • -e <function>: 특정 함수만 추적한다. 예를 들어, -e printf는 printf 함수만 추적한다.
  • -f: 자식 프로세스에서 발생하는 함수 호출도 추적한다.
  • -o <output_file>: 추적 결과를 파일로 저장한다.
  • -s <size>: 문자열 인자의 최대 크기를 지정한다.
  • -tt: 함수 호출 시간 정보를 출력한다.

이 외에도 ltrace는 다양한 옵션을 제공하므로, man ltrace 명령을 통해 상세한 도움말을 확인할 수 있다.

Example

다음은 간단한 C 프로그램으로, “Hello, World!”를 출력하고, sleep 함수를 호출한 후에 다시 “Goodbye!”를 출력한다.

#include <stdio.h>
#include <unistd.h>

void sleep_and_print(const char* message, int seconds)
{
    sleep(seconds);
    printf("%s\n", message);
}

int main()
{
    printf("Hello, World!\n");
    sleep_and_print("Goodbye!", 3);
    return 0;
}

위의 예제 코드를 컴파일하여 실행 바이너리 파일을 생성한 후, ltrace를 사용하여 해당 프로그램을 추적한 결과는 다음과 같다.

$ gcc example.c -o example
$ ltrace ./example
__libc_start_main(0x4005ed, 1, 0x7ffd0ad07d68, 0x400690 <unfinished ...>
puts("Hello, World!"Hello, World!
)                                   = 14
sleep(3)                            = 0
puts("Goodbye!"Goodbye!
)                                  = 9
+++ exited (status 0) +++

출력 결과에서는 ltrace가 프로그램의 라이브러리 함수 호출을 추적하고, 호출된 함수와 해당 함수의 인자, 반환 값 등을 보여주고 있다. 위의 예제에서는 printf와 sleep 함수의 호출을 확인할 수 있다.

만약 제대로 trace를 하지 않고 있다면 “-no-pie” 옵션을 주어 컴파일 한다.

$ gcc -no-pie example.c -o example

참고

PTRACE 사용법
strace 사용법
ltrace 사용법

답글 남기기