8

Mac OS 10.11.1 'El Capitan' で Valgrind 3.11.0 を使用しているときに見られる明らかな無限ループの問題について、できるだけ多くの情報を収集しようとしています。

valgrindLLDB でプログラムを実行するか、プログラムの実行にアタッチしてからvalgrindプロセスを停止すると、次のようなバックトレースが表示されます。

* スレッド #1: tid = 0x24ab4, 0x000000010805920b, 停止理由 = シグナル SIGSTOP
  * フレーム #0: 0x000000010805920b
    フレーム #1: 0x0000000108040dda
    フレーム #2: 0x00000001080b6790
    フレーム #3: 0x00000001080b2fd3
    フレーム #4: 0x00000001080b7c25
    フレーム #5: 0x00000001080b6113
    フレーム #6: 0x00000001080b3cd0
    フレーム #7: 0x00000001080c54d9

これらのフレームがどのオブジェクトに対応しているかを知るにはどうすればよいですか?

プロセスを試しvmmapてみましたが、情報が表示されません。特に、dylibs がプロセスのメモリにマップされたアドレス範囲を通常表示する「プロセスの書き込み不可領域」セクションは空白です。

$ vmmap -v 21729
プロセス: memcheck-amd64-darwin [21729]
パス: /usr/local/Cellar/valgrind/3.11.0/lib/valgrind/memcheck-amd64-darwin
ロードアドレス: 0x100000000
識別子: memcheck-amd64-darwin
バージョン: ???
コードタイプ: X86-64
親プロセス: bash [11895]

日時: 2015-11-30 11:52:16.392 -0500
打ち上げ時間: 2015-11-30 11:51:53.557 -0500
OS バージョン: Mac OS X 10.11.1 (15B42)
レポートのバージョン: 7
分析ツール: /Applications/Xcode.app/Contents/Developer/usr/bin/vmmap
分析ツールのバージョン: Xcode 7.1.1 (7B1005)
----

プロセス 21729 の仮想メモリ マップ (memcheck-amd64-darwin)
出力レポート形式: 2.4 -- 64 ビット プロセス
VM ページ サイズ: 4096 バイト

==== プロセス 21729 の書き込み不可領域
領域タイプ 開始 - 終了 [ VSIZE RSDNT DIRTY SWAP] PRT/MAX SHRMOD PURGE 領域の詳細

==== プロセス 21729 の書き込み可能領域
領域タイプ 開始 - 終了 [ VSIZE RSDNT DIRTY SWAP] PRT/MAX SHRMOD PURGE 領域の詳細

==== 凡例
SM=共有モード:  
    COW=copy_on_write PRV=プライベート NUL=空 ALI=エイリアス
    SHM=共有 ZER=zero_filled S/A=shared_alias
PURGE=パージ可能モード:  
    V=揮発性 N=不揮発性 E=空 それ以外の場合はパージできません

==== プロセス 21729 の概要
(ヌル)
4

2 に答える 2

1

valgrind を使用してから長い時間が経ちましたが、デバッグがどのように機能するかを完全に忘れていました...

valgrind の下で実行されているプログラムをデバッグするには、デバッガーが通信できるように gdbserver ポートを開くように valgrind に指示する必要があります。Valgrind は魔法をすべて元に戻す方法を知っており、Valgrind が管理しているプログラムを普通のプログラムであるかのように見せかけます...

これについては、次のセクション 3.2 で説明されています。

http://valgrind.org/docs/manual/manual-core-adv.html .

LLDB は、gdb リモート プロトコルを使用して通信する方法も認識しておりgdb-remote、サーバーに接続するためのコマンドを備えています。

これはそのままでは lldb では機能しません。レジスタ定義に問題があるようです。これを改善するためにvalgrindにいくつかの作業があるようです:

https://bugs.kde.org/show_bug.cgi?id=356174

とにかく、それはそれが機能するはずの方法です。

于 2015-12-03T03:04:19.447 に答える