2013-11-03 1 views
27

LLDB를 사용하고 있는데, 메모리 0xb0987654의 값을 출력하는 방법이 궁금합니다.lldb를 사용하여 0xb0987654의 메모리를 인쇄하는 방법은 무엇입니까?

+1

'print * (int *) 0xb0987654'을 사용해 보셨습니까? –

+1

오류가 발생했습니다. 오류 : 구조체를 dematerialize 할 수 없습니다. (null) Execute에서 오류가 발생했습니다 .JITExpression을 완료 할 수 없습니다. –

+0

그런 다음'gdb'를 사용하십시오. –

답변

8

"me"은 찾고 계신 명령입니다. 예를 들어

이 lldb 명령 :

me -r -o /tmp/mem.txt -c512 0xb0987654 

가 /tmp/mem.txt에서 파일로 메모리 주소에서 512 바이트를 복사합니다.

32

마이클의 대답을 보완합니다.

memory read -s1 -fu -c10000 0xb0987654 --force 

디버거에서 인쇄 할 것이다 :

내가 사용하는 경향이있다.

  1. 이렇게 포맷 INT
  2. -f위한 UINT8 예 1 및도 4를 사용하여 그룹화 바이트 -s. 나는 본질적으로 올바른 상징을 잊어 버린다. 당신이 --force 함께 추가, 1024 개 이상의 바이트를 인쇄하는 경우 그냥 -f와 함께 문을 넣어 그것은 당신을 다시 스냅 당신에게 모든 옵션의 목록을 제공합니다
  3. -c 바이트
  4. 의 카운트입니다

희망이 도움이됩니다.

38

Xcode에는 매우 좋은 메모리 브라우저 창이 있습니다. 메모리 주소의 내용이 매우 멋지게 표시됩니다. ⌘⇧M에게

또는

을 눌러

enter image description here

당신은 그것을 accesss 수 있습니다 : 그것은 또한 당신이 바이트 그룹화 및 표시 바이트 수를 제어하고, 메모리 페이지를 다시 이동하거나 전달할 수 있습니다 디버그 -> 디버그 워크 플로우 -> 메모리보기

검사 할 메모리 주소를 붙여 넣을 수있는 필드의 왼쪽 하단에 주목하십시오! 여기

문서 : https://developer.apple.com/library/ios/recipes/xcode_help-debugger/articles/viewing_memory.html

관련 답변을 여기에 : How do I open the memory browser in Xcode 4?

1

여기 lldb에 고정 길이의 입력 배열을 표시하는 간단한 트릭입니다. 프로그램이 9 개 요소를 가리키는 긴 * 변수를 포함하는 경우, 당신은 9 개 긴 값의 고정 된 배열을 포함하는 구조체 타입을 선언하고 해당 유형에 포인터를 캐스팅 할 수 있습니다

long *values = new long[9]{...}; 

(lldb) expr typedef struct { long values[9]; } l9; *(l9 *)values 
(l9) $1 = { 
    values = { 
    [0] = 0 
    [1] = 1 
    [2] = 4 
    [3] = 9 
    [4] = 16 
    [5] = 25 
    [6] = 36 
    [7] = 49 
    [8] = 64 
    } 
} 

내가 타입 정의를 사용할 때 C로 코딩하면 C++에서는 필요 없습니다.