2010-08-19 1 views
1

인터페이스에 함수 및 프로 시저를 표시하는 보호 된 객체가 있습니다. gdb에서 그 중 첫 줄에 bp를 설정하면 이상한 결과가납니다.gdb 및 GPS : 보호 된 유형의 Ada 객체의 일부인 함수 또는 프로 시저에 중단 점을 설정할 수 없습니다.

 
(gdb) 
(gdb) b database-access_manager.adb:20001 
Breakpoint 3 at 0x1a10588: file y:/svs/central_switch/controller/database/ 
database-access_manager.ads, line 20001. 
(gdb) 

당신은 그 GDB가 혼란 볼 수 있습니다

여기 내 GDB 콘솔에서 미리보기입니다. .adb 파일의 20001에 bp를 지정했으나 gdb는 해당 광고 파일의 20001에 bp를 설정했다고 말하면서 응답했습니다.이 행에는 많은 행이 없습니다.

무엇을 제공합니까?

+0

편집 됨; 잘못된 경우 되돌려주십시오. – trashgod

+1

코드를 실행할 때 * 줄이 어지럽습니까? (아마 그렇지 않다고 생각하거나 여기에 묻지 않을 것입니다 :-) 보호 된 본문의 다른 줄에 휴식을 설정하면 어떨까요? 또는 본체에서 호출되는 서브 프로그램 내에서? 보시다시피, 나는 정말로 "무엇을 줄 수 있습니까?"라고 대답 할 수는 없습니다. 그러나 이것들은 내가이 상황에 직면했을 때 휴식을 취하려고 노력하는 것들입니다. –

+0

큰 파일입니다! 나는 ~ 6K 이상 아무것도 가지고 있지 않다. 리모트 파일 시스템에 있어도 상관 없습니다. 그러나 소스를'C :'로 옮겨보십시오. – trashgod

답변

1

.ads 파일이 정의되지 않거나 일반적인 것을 사용하지 않았습니까?

나는 Ada generics를 잘 처리하는 디버거를 아직 찾지 못했다. 컴파일러는 종종 디버거에서 혼란스러워하는 반투명 코드의 뗏목을 만듭니다. 나는 C++ 템플릿에 같은 문제가 있다고 의심한다.

또 다른 가능성은 프로그램을 컴파일 한 이후 수정 된 소스 파일을보고 있다는 것입니다.

+0

일반을 사용하지 않습니다. 이미지 파일이 새로 빌드됩니다. 나는 거기에있는 누군가가 자신의 gdb를 자극하고 멤버 함수 또는 보호 된 유형의 프로 시저에서 bp를 설정하려고 시도하고 있습니다. – Tom

0

나는 누군가가 거기에 그들의 gdb을 자극하고 또한 보호 된 유형의 구성원 기능이나 절차에 bp를 설정하려고 노력하고 있습니다.

나는 chopprotected type Stick의 몸에 침입, dining philosophers 성공적이 시도. 나는 맥 OS X에 GNAT 4.3.4를 사용하고 4.4 우분투 (10)

부록에있어 : ​​GNAT 프로 6.3.1와 윈도우에서 실행

 
$ gdb --version 
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008) 
Copyright 2004 Free Software Foundation, Inc. 
$ gnat --version 
GNAT 4.3.4 20090621 (prerelease) [gcc-4_3-branch revision 148757] 
Copyright 1996-2007, Free Software Foundation, Inc. 

+0

이제 재미 있습니다. gdb의 버전은 무엇입니까? Windows에서 GNAT GPL 2010 (20100603) [rev = gdb-7.1-ref-90-g6d5b58a]에 GNU gdb (GDB) 7.1을 사용하고 있습니다. 내 GPS가 내 GPS와 같습니다. gdb가 7.1이기도합니다. 아마도 Windows 문제일까요? – Tom

+0

이제 질문은 입니다. "보호 된 유형의 함수 또는 프로 시저에 대해 Windows에서 gdb의 bp를 성공적으로 설정하고 공격 한 사람이 있습니까?" – Tom

+0

@Tom : 위를 참조하십시오. '@'가 없으면 작성자 만이 귀하의 의견에 대한 통지를 받게됩니다. 새로운 결과로 질문을 편집하면 적극적인 질문 사이에서 문제가 발생합니다. – trashgod

1

(나는이 이상적인 데이터되지 않습니다 실현 당신을위한 포인트!) 이것은 잘 동작했습니다.

내가 통지 내가 서브 프로그램 사양에 BP를 요청하는 경우, GDB 효과적으로 두 개의 BPS, 사양의 하나는 첫 번째 문 하나 설정하는 것이 한 (주어진 정도,

package body Protected_Object is 

    protected body PO is 
     procedure Put (V : Integer) is 
     begin 
     Value := V; 
     end Put; 
     function Get return Integer is 
     begin 
     return Value; 
     end Get; 
    end PO; 

end Protected_Object; 

gdb를 콘솔이 말한다

Breakpoint 1, <protected_object__po__putP> (<_object>=..., v=42) at protected_object.adb:4 
(gdb) cont 

Breakpoint 1, protected_object.po.put (<_object>=..., v=42) at protected_object.adb:6 
:

gdb) break protected_object.adb:4 
Breakpoint 1 at 0x401729: file protected_object.adb, line 6. (2 locations) 

) Put과 런타임에, 과연이 휴식이 있습니다

버전 : GNAT Pro 6.3.1 (20100112) 용 GNU gdb (GDB) 7.0.1 [rev : 158983]

0

다음은 내 문제의 업데이트입니다.

액세스 방법으로 보호 된 유형을 만들고이를 작은 주에서 사용했으며 내 예제 보호 유형의 중단 점이 정상적으로 작동하는 것으로 나타났습니다.

이제 회사의 대규모 빌드의 상황에서 중단 점이 작동하지 않는 이유를 이해하려고합니다.

각각 동일한 gdb, GPS, & 컴파일러 스위치를 사용하고 있으며 작은 프로그램에는 사용할 수 있지만 큰 프로그램에는 사용할 수 없습니다.

나는 /가있을 경우 결과를 게시 할 예정입니다.

모든 답장을 보내 주셔서 감사합니다.

관련 문제