developer tip

XE2를 사용한 원격 디버깅-문자열 표시

copycodes 2020. 12. 13. 09:50
반응형

XE2를 사용한 원격 디버깅-문자열 표시


DElphi XE2 (업데이트 # 4)와 Windows XP 대상간에 대규모 앱을 원격 디버깅하고 있습니다. PAServer가 대상에서 실행 중이고 응용 프로그램이 제대로 작동하고 중단 점에서 중지됩니다 (그 성취가 얼마나 힘들 었는지 믿지 않을 것입니다-힌트-DPROJ를 삭제하고 XE 이전의 IDE를 통해 수행 한 경우 다시 시작하십시오).

로컬 변수와 시계의 디스플레이는 로컬에서 디버깅 할 때 볼 수있는 '일부 문자열'형식의 일반적인 디스플레이와 비교하여 이상한 형식으로 내 문자열을 표시합니다. 내가 참조:

여기에 이미지 설명 입력

누구든지 문자열이 이런 식으로 표시되는 이유를 말할 수 있습니까? 또한 아직 할당되지 않은 출력 변수의 {} 사이에 상당히 많은 {NULL}과 가비지가 발생합니다. 감사.

. 이 형식은 넓은 문자열을 나타냅니다. Windows 7에서 간단한 앱을 사용해 보았고 다음과 같은 결과를 얻었습니다. 중단 점의 내 앱 :

여기에 이미지 설명 입력

표시된 로컬 문자열 변수 :

여기에 이미지 설명 입력

잘린 'Hello'에 유의하십시오. XE2는 때때로 원격 유니 코드 문자열에 문제가있는 것 같습니다. 내 PaServer는 버전 1.0.2입니다. 누구든지 이것이 최신인지 확인할 수 있습니까? '업데이트 # 4에서 가져온 것 ...


문자열 값 주위에 {}가있는 이유를 잘 모르겠습니다. 내 직감은 값이 원격 실행에서 오는 것을 보여주는 것입니다.하지만 S최적화로 인해 잘리는 사실을 알고 있습니다. ..

{$O-} // Disable Optimization
var
  S: AnsiString;
  S2: UnicodeString;
begin
  S := 'Hello';
  S2 := 'Hello2';
  ShowMessage(S2);
end;
{$O+} // Enable Optimization

이제 S디버깅 할 때 'Hello'(variable의 ) 값이 그대로 유지됩니다. 마찬가지로 할당 된 값을 사용하는 경우 S:

var
  S: AnsiString;
  S2: UnicodeString;
begin
  S := 'Hello';
  S2 := 'Hello2';
  ShowMessage(S + S2);
end;

Delphi의 최적화는 이제 S유효한 범위 내에서 사용되고 있음을 식별 하므로 값이 보존됩니다.

따라서 "버그"라고 부르는 것은 실제로 Borland / Inprise / Codegear / Embarcadero가 의도 한대로 정확히 "컴파일러 기능"입니다.


(@Dave에서 코드를 복사하고 있습니다)

var
  S1: AnsiString;
  S2: UnicodeString;
begin
  S1 := 'Foo';
  S2 := 'Bar';
  ShowMessage(Format('%s!', S2));
end;

여기에서 로컬 var S1은 어디에도 사용되지 않기 때문에 최적화되어 있으므로 값이 더 이상 상대적이지 않습니다.

로컬 컴퓨터에서 실행 해보세요. S1이 보이 시나요?


관련이 있는지 확실하지 않지만 "Format"등과 같은 특수 명령이 포함 된 System.AnsiStrings를 알고 있습니다. 다음과 같은 것을 사용하면 문제가 해결 될 수 있습니다.

var
  S1: AnsiString;
  S2: UnicodeString;
begin
  S1 := 'Foo';
  S2 := 'Bar';
  ShowMessage(Format('%s!', S2));
end;

또한 몇 가지 공개 된 버그가 있습니다. 그 중 하나를 배제하기 위해 어떤 특정 버전의 OS 및 도구를 사용하고 있습니까 (예 : Win7 x64 Ultimate 등)?


프로젝트-> 옵션-> Delphi 컴파일러-> 연결-> 원격 디버그 기호 포함 = true

참고 URL : https://stackoverflow.com/questions/11631625/remote-debugging-with-xe2-display-of-strings

반응형