2009-08-13 3 views
3

Mac OS X v10.5 (Leopard)을 실행하는 MacBook Pro에서 Eclipse Galileo를 사용하여 C++ 코드를 디버깅하려고합니다. 이걸 처음 시도하는거야. 내가 디버그하고 싶습니다,하지만 물건을 테스트하기 위해 복잡한 C++ 프로그램을 가지고, 난 그냥 디버깅 시도하고 다음을 통해 단계 : 나는, 디버그 아이콘을 클릭 GDB를 사용하도록했다 Mac에서 Eclipse Galileo를 사용하여 C++ 디버깅 문제

#include <iostream> 
using namespace std; 

int main() 
{ 
    int x = 0; 
    cout << x << endl; 

    x = 54; 
    cout << x << endl; 

    return 0; 
} 

(DSF) 프로세스 시작 관리자를 만들고 코드를 단계별로 실행하기 시작했습니다. x의 값을 모니터 할 수 있기를 바랬으므로 변수 창을 열고 보았습니다. 처음에는 4096이었는데, 아마도 약간의 쓰레기 값이었을 것입니다. 나는이 문제를 파악하거나 주위에 얻을 수없는 것

Failed to execute MI command: 
-var-update 1 var1 
Error message from debugger back end: 
Variable object not found 

: 마자 나는 그것이 값을 표시 한 다음 줄을 명중로, 지금 다음과 같은 오류를 보여줍니다. 그리고 몇몇 구글 검색은 리드의 힌트조차없이 뼈가 마르도록 나타났습니다.


솔루션는 : drhirsch 아래에 지적한 바와 같이, 표준은 GDB 작성 프로세스 실행기 대신 프로세스 실행 프로그램을 만들 사용합니다. (사실 이것은 해결 방법이나 실제 해결책이 아니지만 최소한 두 사람에게는 효과가있었습니다.)

+0

안녕하세요. 동일한 오류가 발생합니다. 어떻게 화면에 오류 출력 "Failed to Exec .."가 표시됩니까? 나는 어떤 정보조차도하지 않는다. ... – flow

+0

좋아, 현재,/opt/local/bin/fsf-gdb를 사용한다. 버전 7.1이다. 디버거를 광범위하게 테스트하지는 않았지만 매우 다른 함수에서 중단 점을 사용할 수 있으며 디버깅 중에 프로그램이 멈 춥니 다. – flow

+0

디버그 정보로 컴파일하고 실행 파일을 제거하지 않았습니까? – steve

답변

5

내 경험상 gdb/dsf 실행 프로그램은 여전히 ​​사용할 수 없습니다. 나는 변수를 보여주기 위해 그것을 얻을 수 없다. 그것은 여전히 ​​매우 버그가있는 것처럼 보인다.

표준 생성 프로세스 시작 관리자를 사용해 보셨습니까? 나를 위해 이것은 잘 작동합니다.

+0

알다시피, 솔직히 말해서 나는 그것을 바꾸려고 시도했는데 전혀 다른 종류의 응용 프로그램 오류가 발생했습니다. 그러나, 당신의 제안에, 나는 다시 시도하고 whaddaya 알고 ... 그것은 작동합니다! 감사! –

+0

그 이후로 Eclipse를 다시 시작했을 수 있습니다. 그게 이유 일 수 있습니다. –

0

미래에 (디버깅하기 위해)을 사용해 볼 수도 있습니다. 모든 파일을 드래그하여 새 프로젝트로 가져 오지만 컴파일하지 마십시오. 대신 디버거 창을 열고 실행중인 프로세스에 연결하십시오.

+0

두 IDE를 사용하는 것이 바람직하지 않습니다. – flow

0

동일한 문제가 있지만 방법을 발견했을 수 있습니다. Eclipse에서 프로젝트 속성 아래의 실행/디버그 설정에서 실행 구성을 삭제하고 디버거를 다시 실행했습니다.

수정하면 디버거를 실행하는 데 적어도 10 초가 걸리지 만 모든 것이 올바르게 작동합니다. 디버깅 속성과 실행 프로그램 구성을 모두 조합해야한다고 생각합니다.

2

이것은 이클립스 이외의 다른 IDE를 사용하는 것 외에는 신뢰할만한 답변이 없어도 여전히 문제가있는 것으로 보입니다.

DSF 만들기 프로세스 시작 관리자와 표준 만들기 프로세스 시작 관리자 변형을 모두 시도했지만 성공적인 디버깅 경험을 얻지 못했습니다. GDB 디버거는 어느 쪽이든 시작하지만 중단 점은 제대로 처리되지 않고 (경우에 따라 해결되지 않음) 거의 변수 값을 검사/추적 할 수 없습니다.

  • 이클립스 3.5.2 (갈릴레오), 64 비트 코코아 버전
  • 이클립스 C/C++ 개발 도구 6.0.2.2
  • 맥 OS X 10.6 : 여기

    내가 사용하고있는 소프트웨어의 0.3 (스노우 레오파드)
  • GDB 6.3.5 (엑스 코드와 함께 제공되는 애플의 버전) 나는 또한 7로부터 소스 GDB 7.1을 구축하려고했습니다

.0 네이티브 x86/x86_64 다윈 지원이 있어야합니다. 그것은 잘 빌드하고 명령 줄에서 OK를 시작하지만 Eclipse에서 실행하려고 할 때 여러 가지 문제가 있습니다. 이는 최근 애플이 디버거가 프로세스에 연결하도록 허용하는 작업 방식 메커니즘에 대한 변경 사항과 관련이있는 것으로 보입니다. 다음 오류가 이들의 전형적인 :

Target request failed: Unable to find Mach task port for process-id 88283: 
(os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8)). 

다양한 소스 애플이 맥 OS X를 지원하기 위해 GDB 6.3.5에서 자신의 특별한 패치를 사용하는 것을 나타냅니다 그러나이는 정말 오래된 코드베이스 (2004) . 반대로 다른 웹 소스에 따르면 Eclipse DSF 디버거 프레임 워크에는 GDB 6.6 (2006 년경?)으로 시작하는 GDB 명령 만 필요합니다.

저는 이클립스 관련 포럼의 모든 곳에서이 문제에 대한 해결책을 찾지 못했습니다. Eclipse CDT 개발 팀에서는 Mac OS X을 사용하는 사람이 거의 없으므로이 플랫폼에서 변경 사항을 테스트하는 일이 거의 없습니다.

EDIT 업데이트 : 위에서 추가 한 모든 테스트 (GDB 버전 6.3.5 및 7.1)는 개발자 빌드 인 Eclipse Helios 3.6 RC3 (C/C++ 개발자 용 IDE)로 다시 시도했습니다.), CDT 7.0이 포함됩니다. 보고 된 모든 문제가 발생했습니다. Mac OS X에서 Eclipse CDT 디버깅 Snow Leopard는 여전히 작동하지 않습니다.

누군가 내가 위에보고 한 시나리오와 다른 뭔가 및/또는 안정적인 Eclipse 기반 솔루션을 알고 있습니까?

+0

Joel, 자신의 질문으로 게시하고 싶을 수도 있습니다. 내 목적을 위해 단순히 표준 런처를 사용하는 drhirsch의 권장 사항은 나를 위해 잘 작동했습니다.두 장의 upvotes는 다른 사람들에게 도움이되었을 수도 있지만,이 페이지에 대한 피드백을 기반으로 모든 사람들을 돕는 것처럼 보이지는 않습니다. 아마도이 주제는 여전히 문제를 겪고있는 자신과 같은 사람으로부터 또 다른 질문을받을 자격이 있습니다. –

+0

@speedmetal - 제안 해 주셔서 감사합니다. 문제가 여전히 존재하기 때문에 나는 그것을 할 수 있습니다. 저는 대신 XCode를 사용했습니다. 아마도 Eclipse 포럼 중 하나에 게시하려고 시도 할 것입니다. –

+0

동일한 문제가 발생했습니다. 새 솔루션을 찾았습니까? – flow

0

릴리스 된 Eclipse 3.6 (Helios) 버전으로 업데이트하고 DSF/GDB 생성 실행 프로그램을 사용하십시오. Eclipse 3.6 (Helios)에서 DSF/GDB 프레임 워크의 기능 패리티를 사용할 수있는 수준까지 끌어 올리는 작업이 많이있었습니다. 디버깅은 이제 Eclipse CDT 3.6 Helios를 사용하여 OS X 10.5 및 10.6에서 올바르게 작동합니다.

+0

안녕하세요 mike, 사용하고있는 디버그 설정을 알려주시겠습니까? – flow

0

지금 확인하십시오. 버전 7.1 인 /opt/local/bin/fsf-gdb을 사용하면 트릭을 수행하는 것처럼 보입니다! 광범위하게 테스트하지는 않았지만 매우 다른 기능에서 중단 점을 사용할 수 있으며 디버깅 중에 프로그램이 멈 춥니 다.

1

Ubuntu에 여러 버전의 Eclipse에서 비슷한 문제가있었습니다. 자주 나를 위해 일한 한 가지 해결책은 최신 버전이 아닌 GDB 버전 6.6을 사용하는 것입니다.