ProbeVue 오류 메시지

이전에 설명한 바와 같이 probevue 명령을 실행하려면 특권이 필요합니다. 일반 사용자가 probevue 명령을 실행하려 하면, RBAC 프레임워크에서 이를 발견하고 명령 실행은 즉시 실패합니다.

$ probevue kernel.e
ksh: probevue: 0403-006 Execute permission denied.

ProbeVue 실행의 권한 및 권한 섹션에서는 권한 및 권한이 있는 루트 사용자가 아닌 사용자가 프로브뷰 명령을 실행할 수 있도록 하는 방법을 설명합니다.

프로브뷰 명령에 내장된 ProbeVue 컴파일러는 컴파일 단계에서 구문 오류, 의미 오류 또는 유형 비호환성 오류를 감지하면 자세한 오류 메시지를 인쇄합니다. 다음 스크립트를 고려하십시오.

/* Syntax error example:
 * syntaxbug.e
 */
@@BEGIN
{
        int i, j, k;

        i = 4;
        j = 22;

        k = i _ z;

        printf("k = %d\n", k);

        exit();
}

위 스크립트에서는 11행, 15열 지정문에서 구문 오류가 있습니다. 빼기 부호(-) 대신 밑줄 문자(_) 기호가 실수로 입력되었습니다. 스크립트를 실행하면 ProbeVue 컴파일러가 이 오류를 감지하고 오류 메시지를 생성합니다:

# probevue syntaxbug.e    
syntaxbug.e: token between line 11: column 15 and line11: column 15: , expected 
instead of this token

또한 ProbeVue 컴파일러는 내부 시스템 호출을 호출하여 Vue 스크립트의 프로브 사양이 유효한지 확인합니다. 일반적인 오류는 프로브 위치 튜플에서 종료된 프로세스의 프로세스 ID 또는 유효하지 않은 프로세스 ID를 전달하는 것입니다. 다른 일반 오류는 스크립트가 하나의 인수를 예상할 때 명령행에서 인수로서 프로세스 ID를 전달하는 것을 잊는 것입니다. 다음 스크립트를 고려하십시오.

/* simpleprobe.e 
 */
@@syscall:$1:read:entry
{
        printf("In read system call: thread ID = %d\n", __tid);
        exit();
}

앞의 스크립트에서는 3줄의 프로브 포인트 튜플에서 '$1' 변수를 대체하기 위해 프로세스 ID를 인수로 지정해야 합니다. 커널은 종료되었거나 존재하지 않는 프로세스를 조사하려고 하면 오류를 반환합니다. 또한 프로세스 ID가 커널 프로세스 또는 시작 프로세스를 표시해도 실패합니다. 뿐만 아니라 다른 사용자의 프로세스를 점검할 필수 특권을 가지고 있는 경우가 아니면 사용자에게 속하지 않는 프로세스를 점검할 수 없습니다. 프로세스 ID가 지정되면 prgrep 명령에서 -p 플래그를 함께 사용하여 프로세스 이름을 인쇄할 수 있습니다.

참고: 이 명령은 지정한 프로세스 ID가 존재하지 않으면 빈 출력을 생성합니다.
# probevue simpleprobe.e 233
probevue: The process does not exist.
ERR-19: Line:3 Column:3 Invalid probe string
# prgrep -p 232
#
# probevue simpleprobe.e 1  
ERR-19: Line:3 Column:3 Invalid probe string
# prgrep -p 1  
init
# probevue simpleprobe.e  
ERR-19: Line:3 Column:3 Invalid probe string

probevue 명령은 특권이 없는 사용자가 커널 변수에 액세스를 시도하는지를 발견할 수도 있습니다. 샘플 프로그램 섹션의 kernel.e 스크립트를 살펴보세요. 다음 예제 세션에서는 권한이 없는 사용자로서 이를 실행하려 하는 경우 발생하는 내용을 보여줍니다.

$ probevue kernel.e
ERR-56: Line:93 Column:39 No authority to access kernel variable
ERR-56: Line:99 Column:23 No authority to access kernel variable
ERR-56: Line:100 Column:24 No authority to access kernel variable
ERR-56: Line:101 Column:25 No authority to access kernel variable
ERR-56: Line:102 Column:24 No authority to access kernel variable
ERR-102: Line:140 Column:13 Operation not allowed
ERR-46: Line:140 Column:9 Invalid Assignment, Type mismatch

Vue 스크립트가 성공적으로 컴파일된 후 probevue 명령은 시스템 호출을 호출하여 컴파일러에서 생성된 중간 코드를 전달하는 새 ProbeVue 세션을 시작합니다. ProbeVue 프레임워크가 새 ProbeVue 세션을 초기화하지 못하면 시스템 호출이 실패합니다. 이에 대해서는 여러 가지 이유가 있을 수 있습니다. 예를 들어 새 세션을 시작하면 사용자의 메모리 자원이 관리자가 지정한 한도를 초과할 수 있습니다. 세션에 단일 세션에 허용된 것 이상의 메모리 자원이 필요할 수 있습니다. 간격 프로브 관리자에 권한이 부여되지 않은 기능이 사용될 수도 있습니다. 점검 중인 프로세스 중 하나는 컴파일 단계 검사가 완료되면 종료할 수 있습니다. 세션을 시작할 수 없으면 커널은 고유한 64비트 오류를 리턴하며 시스템 호출에 실패합니다.

프로브 작업을 실행하는 동안 심각하거나 복구할 수 없는 오류가 발생하면 프로브 ProbeVue 프레임워크는 성공적으로 시작되고 활성화된 ProbeVue 세션을 중단할 수 있습니다. 가능한 오류에는 세션 또는 사용자 메모리 한도 초과(스레드 로컬 변수 및 리스트 변수에 대한 메모리 요구사항은 세션이 진행되면서 커질 수 있음), 임시 문자열 또는 스택 영역 한도 초과, 배열 제외 색인 액세스, 0으로 나누기 시도 등이 포함될 수 있습니다. 모든 경우에 커널은 세션을 종료하는 동안 고유한 64비트 오류 번호를 리턴합니다.

시작 시 또는 시작 이후에 세션이 실패하면 probevue 명령은 16진 형식의 고유한 64비트 오류 번호를 포함하는 일반 오류 메시지를 인쇄하고 종료합니다. 다음 차트에서는 커널이 리턴할 수 있는 일반적인 몇 가지 64비트 오류의 의미를 제공합니다.

커널 오류 의미 발생 경우
0xEEEE00008C285034 1차 추적 버퍼 할당 중 메모리가 부족합니다. 세션 시작 시
0xEEEE00008C285035 2차 추적 버퍼 할당 중 메모리가 부족합니다. 세션 시작 시
0xEEEE00008C52002B 프로브 스펙 문자열에 대한 스토리지 할당 중 메모리가 부족합니다. 세션 시작 시
0xEEEE000096284122 스레드 로컬 스토리지에 대한 스토리지 할당 중 메모리가 부족합니다. 세션 시작 시
0xEEEE000081284049 간격 프로브 관리자에서 사용자 공간 액세스 기능을 사용합니다. 세션 시작 시
0xEEEE0000D3520022 일반 사용자에 대한 세션 수 한계입니다. 세션 시작 시
0xEEEE000096284131 get_userstring 함수에 전달된 주소가 잘못되었습니다. 프로브 조치 실행 시
0xEEEE00008C520145 스레드 로컬 변수에 대한 최대 스레드 한계 히트입니다. 프로브 조치 실행 시