2011-04-25 3 views
2

다른 프로그램에서 사용하는 C로 공유 라이브러리를 구축 중입니다. 내 공유 라이브러리의 일부 오류로 인해 이러한 다른 프로그램이 중단되는 경우가 있습니다. 이런 종류의 버그를 재현하는 동안 내 라이브러리의 어떤 기능이 호출되는지, 어떤 인수와 순서로 호출되는지를 아는 것은 매우 유용합니다. 물론 모든 함수에 printf() 호출을 추가하거나 모든 함수에 중단 점을 추가 할 수 있지만이를 확인하는 더 좋은 방법이 있어야합니다.내 라이브러리에 대한 모든 호출 목록 표시

편집 : 나는 OSX에이 일을 해요 이후, DTrace를와 관련 스크립트 dapptrace 유망 보인다. 그러나, 일부 문서를 파고 난 후에 나는 아직도 길을 잃어 버렸다.

말은, 내 라이브러리는 /path/to/libmystuff.so 내가이 라이브러리에 연결하는 프로그램 테스트 있어요. dtrace을 사용하면, libmystuff.so에있는 모든 함수 호출 목록을 어떻게 불러올 수 있습니까?

답변

2

참조하십시오. 원래 포스터는 아래 주석에서 dtrace을 사용하여 Mac OS X에서 작동하는 솔루션을 보여줍니다.

+0

미안하지만이 문제에 대해서는 언급하지 않았지만 OSX를 주로 사용합니다. 그러나, osx에 대한 ltrace에 대한 검색은'dtrace'로 이끌었습니다. 이것은 매우 유망한 것으로 보입니다. 힌트를 주셔서 감사합니다! –

+0

여러분을 환영합니다! – jmbr

+0

올바른 대답으로'dtrace'를 올바르게 추가했습니다. 그래서 받아 들일 수 있습니다. –

1

당신이 유닉스에서 작업하고 있다고 가정합니다. 디버그 목적으로 gdb을 사용하십시오. 프로그램이 손상된 경우. 생성 된 코어 파일을 사용하여 스택 추적을 조사 할 수 있습니다. 요청한 모든 정보를 제공합니다.

코어 파일로 GDB를 사용하여 스택 트레이스를 확인하기위한 자세한 정보는 Linux 시스템에서 작업하는 경우 당신은 그 목적을 위해 ltrace을 사용할 수 here.

+0

내 라이브러리에 걸린 모든 통화 또는 충돌로 이어지는 통화를 볼 수 있습니까? –

0

함수 이름, 인수 등의 모든 세부 정보를 사용하여 파일 시스템에 함수 호출을 기록 할 수도 있습니다. (일반적으로 로깅은 Server-Clients 응용 프로그램에서 도움이되지만 응용 프로그램에 대해서는 잘 모르겠습니다). 이쪽 모든 통화를 추적 할 수 있습니다. 디버깅 모드에서만 로깅을 활성화 할 수도 있습니다. 이 회신이 도움이되기를 바랍니다.

+0

모든 함수에'fwrite()'호출을 수동으로 추가하지 않고도이 작업을 수행 할 수 있습니까? –

관련 문제