2012-02-17 5 views
1

gdb를 사용하여 디버깅 할 때 C++ 코드 : 1) gdb에서 변수를 만드는 방법은 무엇입니까? gdb/mi 명령을 사용 하시겠습니까? 2) gdb에서 클래스의 인스턴스를 만드는 법. 3) 미래에 사용할 수 있도록 gdb에서 생성 된 변수에 생성 된 인스턴스를 어떻게 할당합니까? 예를 들어 는 :클래스 인스턴스를 만들고이를 변수에 할당하는 방법은 무엇입니까?

C++ code: 
class C { public:int value; } 

gdb commands (pseudo-code): 
var v = new C() 
print v.value 
+0

이 숙제가 있습니까? 당신은 이미 무엇을 시도 했습니까? –

+0

아니요, 이것은 제 집의 일이 아닙니다. 내 작품을위한거야. GDB가 중단 점에서 중단 될 때 로거 클래스의 인스턴스를 만들고 싶었고, 그런 다음 작업 클래스의 복잡한 인스턴스를 검사 할 수있었습니다. 작업 클래스에는 많은 멤버 변수가 있으며 멤버에는 많은 멤버가있을 수 있습니다. 그래서 필요한 정보를 출력하기 위해서는 logger 클래스의 인스턴스를 생성해야합니다. – sean

답변

0

"새로운"현재 GDB에서 지원되지 않습니다. 그것은 파서에서 전혀 처리되지 않습니다. 진행 상황을 추적하고 싶다면 gdb bugzilla에 버그가 있습니다. 누군가 (기침 기침)가 그 일을하고 있습니다.

한편 나는 수동으로 할 수 있다고 생각합니다. 나는 진짜로 이것을 결코 시도하지 않았다. 는 C++ ABI 어떤 마법의 숨겨진 인수를 지정 이후

set var $new = malloc(sizeof(struct Whatever)) 
call Whatever::Whatever($var) 

그러나, 당신은 그 호출에 인수를 추가해야 할 수 있습니다 생각은 무엇인가 같다.

또 다른 방법은 프로그램의 디버깅 편의 기능을하는 것입니다 :

whatever *new_w() { return new whatever(); } 

그런 다음 당신은 그냥 GDB에서 직접 호출 할 수 있습니다.

관련 문제