web-dev-qa-db-ja.com

lldbを使用して0xb0987654のメモリを印刷する方法は?

私はLLDBを使用していますが、メモリ0xb0987654に値を印刷する方法を疑問に思っていますか?

40
Adam Lee

Xcodeには非常に良いMemory Browserウィンドウがあり、メモリアドレスの内容を非常にうまく表示します。また、バイトのグループ化と表示されるバイト数を制御し、メモリページを前後に移動できます。

enter image description here

Access ^⌥⇧M(Xcode 9以前では⌘⇧M)を押すとアクセスできます

または

デバッグ->デバッグワークフロー->メモリの表示

検査するメモリアドレスを貼り付けることができる左下隅のフィールドに注目してください!

ここのドキュメント: https://developer.Apple.com/library/ios/recipes/xcode_help-debugger/articles/viewing_memory.html

ここに関連する回答: Xcode 4でメモリブラウザを開く方法

60
Eric

マイケルの答えを補完するために。

私は使用する傾向があります:

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

デバッガーで印刷されます。

  1. -sバイトのグループ化のため、たとえばuint8には1を、intには4を使用します
  2. -fはフォーマット用。私は本質的に正しいシンボルを忘れています。 -fを使用してステートメントを配置すると、スナップバックされ、すべてのオプションのリストが表示されます
  3. -cはバイト数をカウントします
  4. 1024バイト以上を印刷する場合は、-forceを追加します

お役に立てれば。

43
Khaled Barazi

me」は探しているコマンドです。

たとえば、次のlldbコマンド:

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

メモリアドレスから512バイトを/tmp/mem.txtのファイルにコピーします。

8

Lldbに固定長の型付き配列を表示するための簡単なトリックを次に示します。プログラムに9つの要素を指すlong *変数が含まれている場合、9つのlong値の固定配列を含む構造体型を宣言し、その型にポインターをキャストできます。

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でコーディングしているときにtypedefを使用しますが、C++では必要ありません。

1
Patrick Beard

たとえば、長さ16x4バイトのメモリを印刷します。

x/16  0xb0987654
0
lbsweek