2013-12-13 7 views
1

Delphi XE3. 나는 JCL 오류 대화 상자를 사용하고 있는데 FullDebug와 FASTMM 내 응용 프로그램에서 활성화되어 있고 스택 트레이스 (JCL 및 FASTMM 모두)에 기호에 추가 "쓰레기"를 받고 :

[74EA3D67] RaiseException 
    [0041815D] FastMM4.TFreedObject.VirtualMethodError$qqrv 
    [0054FEC5] Vcl.Controls.TWinControl.CMInvalidate$qqrr24Winapi.Messages.TMessage 

내가 원하는 것을 입니다 :

[74EA3D67] RaiseException 
    [0041815D] FastMM4.TFreedObject.VirtualMethodError 
    [0054FEC5] Vcl.Controls.TWinControl.CMInvalidate 
    [00548735] Vcl.Controls.TControl.WndProc 

그러나 응용 프로그램이 릴리스에 대해 컴파일 할 때. 디버그를 위해 컴파일 할 때 스택 트레이스는 "clean"입니다. FastMM과 JCL 보고서에서 같은 종류의 "가비지"를보고 있기 때문에 문제가되는 라이브러리 중 하나라고 생각하지 않습니다.

$ qqv는 일정한 것으로 보이고 문자열의 나머지는 실행마다 다르기 때문에 따옴표가있는 "쓰레기"라고 말합니다.

지도 파일과 기호 설정 및 JCL 기호를 확인 (및 재확인)했는데 설정에서 다른 내용을 볼 수 없습니다.

편집 : FASTMM 그래서 모든 문제를 해결 한 문제를 해결 ... (내 생각) 스택 트레이스를 생성하는 JCLDebug를 사용하여 그대로 당연히 근본 원인은 동일합니다.

+0

이'$ qqrv' mangling의 의미는 여전히 문제가 아닙니다. – kludg

+0

Delphi에서 mangling을 설명하는 기사 (독일어 번역본)를 발견했습니다. 예를 들어'qqr'는'register' 호출 규칙을 의미합니다 - http://translate.google.com/translate?prev=hp&hl=en&js=y&u=http%3A//edn.embarcadero.com/article/27758&sl=de&tl=en&history_state0 = – kludg

+0

"잘못"된 점은 stacktrace가 읽기 쉽지 않아서 읽을 수 없다는 것과 스택을 고의적으로 맹 글링하는 것입니다. 페이지 링크를 가져 주셔서 감사합니다. –

답변

1

이것은 JCL의 .map 파일 구문 분석기에있는 버그입니다.

는 상세한 스레드 및 수정 방법에 대한 http://sourceforge.net/p/fastmm/discussion/443400/thread/82b024dc/

참조하십시오.

은 $ qqrv 및 다른 텍스트 모두 유효하고 잠재적으로 유용한 정보가 그래서 오히려입니다 :

0

아마도 릴리스 구성에는 스택 프레임 컴파일러 옵션이 포함되어 있지 않을 것입니다 (기본적으로 그렇지 않습니다). 이 정보가 실행 파일에 컴파일되지 않으면 스택 추적에 표시되는 것은 런타임 패키지 내보내기의 이름입니다. 해결책은 디버그 모드에서 컴파일하거나 릴리스 구성의 컴파일러 옵션에서 스택 프레임을 설정하는 것입니다.

+0

난 그냥 확인 했어 * * * 릴리스 프레임에 스택 (그 베타, 그래서 많이 디버그 왼쪽) –

+0

여기에 JCL 디버그가 설치되어 있지 않아도 지금은 확인할 수 없지만 디버그 정보가 켜져있다. , 너무? –

0

모두에보고 후 나는이, 그냥 내 오해가 더 문제 없다 어쩌면 오래된 코드의 비트 결론 그것을 제거하는 방법을 찾는 것보다 그것을 사용하는 법을 배우는 것이 더 낫습니다. 위 질문에있는 링크는이 작업에 대한 좋은 근거를 제공합니다.