2010-01-15 4 views
1

C로 작성된 응용 프로그램을 파일에 기록하여 함수 호출을 기록합니다. 이제 로깅 된 함수 호출을 다른 C 응용 프로그램에서 다시 사용해야합니다 (로깅의 이유이기도 함).함수 호출을 파일로 로깅하고이 로그 파일을 프로그램 코드로 사용

이 응용 프로그램은 다른 것들 옆에 기록 된 것과 정확히 일치해야합니다.

예 : 첫 번째 애플리케이션

printf("Starting main process w/ pid %d\n", (int)getpid()); 
    Display *dsp = XOpenDisplay(NULL); 

되면 함수 호출을 실행한다 번째 어플리케이션 로그온 파일에서 촬영하여 기록 하였다 MYLOGFILE.

아이디어를 실현하는 방법은 무엇입니까?

+1

.... 로그 파일에 파이썬 코드를 작성하십시오 : 실행하기 쉬운 것일까요? 왜 어쨌든 그렇게하고 싶습니까? – jldupont

+1

"로그 판독기"가 아닌 통역자가 필요합니다. – AraK

+0

각각의 가능한 함수 호출 항목 (application1 - 기록되는 - 약 200 개의 다른 것만 포함 할 수 있음)에서 해당 함수에 매핑을 작성하여 고유 한 인터프리터를 만들어야 할 수도 있습니다. 체크 포인트를 사용하여 그래픽 (X11) 응용 프로그램을 다시 시작해야하므로 XServer에 대한 연결을 복원하고 이전 응용 프로그램을 다시 빌드해야합니다. – OldMacDonald

답변

1

본질적으로 C 코드를 생성하고 해당 코드를 실행하고 싶습니다. 이 경우 라이브러리로 사용할 수있는 TCC을 확인하고 정확하게이 기능을 제공 할 수 있습니다.

물론 플랫폼이 지원되는 플랫폼이라고 가정합니다.

그렇다면 C 코드가 나오지 않고 다른 응용 프로그램에서이를 읽거나 컴파일하고 실행하는 것을 피할 것이라고 말했습니다. 나는 당신에게 다음 중 하나를 제안 :

  1. 자신의 언어를 발명하고 로그 파일에를 방출한다. 그런 다음 해당 언어에 대한 인터프리터를 작성하고 다른 프로그램이 로그 파일을 읽고 해석하도록하십시오.

  2. 두 번째 프로그램에 스크립트 언어 (예 : Lua)를 삽입하고 해당 언어로 로그 파일을 내 보냅니다.

가장 적합한 솔루션은 로그 파일에 설명해야하는 작업의 복잡성에 따라 다릅니다.

가장 마지막 해결책으로 으로 지정하면 system()을 사용하여 컴파일 된 프로그램보다 컴파일러를 호출하는 것이 좋습니다. 그러나 나는 정말로 그렇게하도록 당신을 정말로 실망시킬 것입니다!

0

어떤 종류의 복제 메커니즘을 구축하고있는 것 같습니다. 노드 A는 N을 통해 행동 1을 수행하고 당신은

여기에 옵션이 많이 있습니다 노드 B에 그 같은 행동을 복제 할,하지만 두 가지 범주로 그들은 모두 가을 :

옵션 1 : 로그 쓰기 기존 유틸리티에서 사용할 수있는 형식의 파일. JavaScript 나 "eval"기능을 가진 다른 언어를 사용했다면 정말 쉽습니다. 노드 A의 로그 파일에 자바 스크립트를 작성한 다음 노드 B에서 "평가"하십시오.

제공 한 샘플 로그는이 접근 방식을 반영합니다. C가 ' "eval"함수가 있습니다. 기본적으로 노드 A에서 B로 로그 파일을 보내 컴파일하고 라이브러리 또는 C 로그에서 사용하는 기능을 구현하는 다른 C 모듈과 링크 한 다음 결과 프로그램을 실행해야합니다.이 같은 템플릿을 포함하여 완전한 C 소스 파일로 로그 파일을 설정할 수 있습니다 :

int main(int argc, char *argv[]) { 
    // Do your setup stuff here. 
#include "/path/to/the/log/file" 
    // Clean up. 
    return 0 
} 

옵션 2를 분석하고 다른 프로그램의 컨텍스트 내에서 로그를 실행하는 파서를 작성합니다.

이 경우 로그 문은 C와 유사하므로 기본적으로 C 인터프리터를 작성하게됩니다.