2012-02-09 3 views
4

크기가 190MB 인 C++ 바이너리가 있습니다. 이 바이너리를 dbx에 넣고 중단 점을 만들려고하면 dbx가 중단됩니다. dbx가 매달린 동안 나는 그 메모리가 빠르게 10GB 이상으로 커지는 것을 보았습니다. TotalView를 사용하면 중단 점을 설정할 수 있습니다. 그러나 표시되는 모든 데이터는 가짜입니다. 나는 다른 많은 작은 바이너리를 성공적으로 디버깅했기 때문에이 바이너리의 큰 크기가 문제가된다.큰 실행 파일로 인해 디버거가 중단됩니다.

바이너리 : ELF 32 비트 MSB 실행 파일 SPARC32PLUS 버전 1, V8 필수, 동적 연결, 제거되지 않음.
컴파일러 : 참조 : Sun C++ 5.9 SunOS_sparc 2007/05/03.
Dbx : 7.6 SunOS_sparc 2007/05/03.
TotalView : 8.2.0-0
운영 체제 : 솔라리스 10

내가 dbx를 사용하고 방법 :

dbx mybinary 
stop at Something.cc:170 

dbx를 결코이 명령에서 반환되지 않으며 나는 결국 별도의 터미널에서 dbx를 죽여야 .

나는 성공하지 못한 채 몇 가지 시도를했다.
1. 대부분의 라이브러리에서 링크를 동적으로 바꾸어 바이너리 크기를 19 MB로 줄였다.
2. Solaris x86에서 시도했습니다.
3. 소프트웨어를 64 비트로 컴파일합니다.

누가 이런 일이 발생할 수 있으며 문제를 해결할 수있는 방법을 알고 있습니까?

+0

컴파일러 버전 및 dbx 버전은 무엇입니까? dbx -V CC -V 확인 만하면 : "stop"명령을 입력하면 dbx가 멈추고 커지기 시작합니다. 그래서 디버거에서 프로그램을 실행하지 않아도됩니까? –

+0

나는 원래의 글을 깨끗하게 정리하여 질문에 대답했다. – Hitman

+0

시도해 볼 수있는 좋은 점 중 하나는 최신 버전의 Solaris Studio를 다운로드하여 사용하는 것입니다. http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.html 사용중인 버전은 4.5 년입니다. –

답변

2

다른 디버거를 사용하여 디버깅을 시도하여 코드가 문제를 일으키는 지 확인하십시오. Solaris에서 제가 가장 좋아하는 디버거는 mdb입니다 :

mdb ./yourapplicationname 
> your_c_fn_name::bp 
> ::run 

C++로 코딩하는 경우에는 맹 글링 된 함수 이름을 사용해야합니다. 당신 파이프 nm의 출력은 엉망이 함수 이름이 무엇인지 알아 grep을합니다 :

nm ./yourapplicationname | grep yourc++fnname 

를 MDB는 DBX와 같은 문제가있는 경우, 나는 당신이 당신의 코드를 살펴 제안했다. 그러나 mdb가 문제없이 bp에 도착하면 mdb (원본 파일로 작업 할 수 없다면)로 작업하거나 dbx를 행복하게 만들 수 있도록 응용 프로그램을 계속 조정할 수 있습니다.

+0

감사합니다 @Mustafa. 시도 mdb 및 중단 점이 작동합니다.Mdb는 인쇄를 사용하여 디버깅하는 단계입니다. 그러나 우리 팀과 저는 소스 파일로 작업 한 디버거에서 더 많은 가치를 발견하게 될 것입니다. 따라서 dbx 또는 TotalView를 작동시키는 데 대한 정보를 매우 감사하게 생각합니다. – Hitman

+0

dbxtool을 사용해 보셨습니까? –

+0

썬 스튜디오 12에서는 dbxtool을 사용할 수 없다고 생각합니다. 또한 dbx 엔진을 사용하는 GUI 레이어입니다. dbxtool 아래에서 동일한 버그가 발생할 가능성이 있습니다. –