問題タブ [watchpoint]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gdb - gdb がウォッチポイントを使用してアドレスにアクセスしようとすると、Snow Leopard がクラッシュする
Snow Leopard 用の MacPorts 経由でコンパイルされた GDB 7.1 を使用して、バイナリ (アセンブリのみ) をデバッグしています。find
gdb コマンドを使用して見つけた特定のアドレスに興味があります。したがって、それは実際に有効なアドレスです。
問題は、ウォッチポイントを設定して ( watch *0x00196f34
) アクセスすると、システムがクラッシュしてすぐに再起動することです。
ハードウェア ウォッチポイントが有効になっていることに気付き、それほど重大な結果が得られないことを期待して、使用するソフトウェア ウォッチポイントに切り替えましたset can-use-hw-watchpoints 0
が、問題は解決しませんでした。
Xcodegdb 6.3
に付属のバージョンを使用しようとしましたが、正常に動作します。このような時計を 6.3 と 7.1 の両方に設定したときに気付いた違いがあります。
gdb 6.3 の場合
gdb 7.1 の場合
新しい gdb がアドレスを 10 進数に変換しているのに、動作する古い gdb が 16 進数で出力されるのはなぜですか? 私はまだgdb 7で作業したいので、ここで何が起こっているのか手がかりはありますか?
ブルーノ・ベラスコ
iphone - Xcodeで変数またはメモリの変更を追跡していますか?
Xcodeで変数の変更やメモリの変更を追跡する方法はありますか? Visual Studio のデータ ブレークポイントのような機能を探しています。
オブジェクトのビュー フレームが変更されている場所を知りたいです。メンバ変数にブレークポイントを設定して実行したい。その後、どこが変更されたかを特定できました。
debugging - どの行のどの演算子がTCLの変数の値を変更するかを知る方法
変数値がいつ変更されるかを理解できない場合があります。そして、変数にウォッチポイントを置いて行を見つける必要があります。これはどのように行うことができますか?変数が変更された行を取得するために、TCL トレース コマンドを使用できますか?
memory - データブレークポイントを実装/設定する方法は?
要件:
メモリの場所が変更されたとき、または書き込まれたときに、割り込みを生成する必要があります。ISRから、メソッド名を含む優れたスタックトレースを提供するブルースクリーンをトリガーできます。
アプローチ:
- タイマーISRの値をテストします。明らかに、これでは満足のいく結果は得られません。
- bochs仮想マシンを発見しました。データブレークポイントを設定してプログラムを停止できる基本的な組み込みデバッガーがあります。しかし、その時点では割り込みを生成できないようです。
- bochsを使用すると、gdbをそれに接続できます。ただし、gdbサポートを使用してビルドすることはできませんでした。
他の考え:
- 実行前にすべての命令に対してトリガーされる一種の「プレビュー命令」割り込み。使用されたメモリ書き込み命令のセットはかなり扱いやすいはずですが、それでもアドレスを抽出するのはPITAだと思います。そして、そのような中断はないと思います。
- 一種の「プレビューメモリアクセス」割り込み。繰り返しますが、私はそこにあるとは思いません。
- ページングを乱用します。対象のページを存在しないものとしてマークし、ページフォールトハンドラーでアドレスをテストします。それでも読み取り操作と書き込み操作を区別する必要があり、ページフォールトハンドラーは正確なアドレスを知ることはできず、ページ番号だけを知ることができると思います。
debugging - gdb、break vs tbreak、watchpoint
ウォッチポイントに関するbreakとtbreakの違いを教えてもらえますか?
簡単なテストコードがあります:
main()でbreakを使用すると、totoが0から2に切り替わるように見えます。
しかし、私がtbreakを使用すると、時計は機能するようです:
startコマンドでも同じ結果が得られ、機能します。
debugging - GDB でウォッチポイントを設定できません
私はデバッグを行っており、変数の値が変化する場所を確認したかったのです。このために、単純な変数ではない watch 'structure->somefunc.getvalue()' のようなことを言ってウォッチポイントを設定しようとしました (おそらくいくつかの関数を呼び出す大きな構造の一部) .これを行うと、現在のコンテキストで gdb に No symbol 'structure->somefunc ..' と表示されます。同じディレクトリで grep を実行すると、同じ式の 3-4 インスタンスが取得されます。私は何かを逃していますか?
gdb - gdb がウォッチポイントで停止しないようにする
ファイル main.c:
gdb では通常、ブレークポイントを設定し、そのブレークポイントで実行するコマンドとしてウォッチポイントを指定します。
監視対象の変数が変更されるたびに実行が停止します。問題は、(私の知る限り) gdb に監視対象変数の値を出力して続行するように指示する方法がないことです。これは、ネストされたウォッチポイントであるためです。それがスタンドアロンのウォッチポイントである場合、これはコマンド 'continue' を使用して簡単に実行できます (main() のスコープ内にいる場合):
では、gdb がネストされたウォッチポイントで停止せず、値の変更のみを出力する方法はありますか? または、ネストされたウォッチ/ブレークポイントで実行するコマンドを指定するには、はい、より良いですか?
さらに、gdb で「苦情 0 を設定」と「確認をオフに設定」を試みましたが、役に立ちませんでした
iphone - デバイスでオーバーリリースされたオブジェクトのデバッグが見つかりません
シミュレーターで動作するかなり大きなアプリがありますが、iPhone デバイスで過剰にリリースされたオブジェクト シナリオを作成します。NSzombies は、オブジェクトがシミュレーターで過度にリリースされておらず、NSZombies がデバイスで機能しないことを除いて、進むべき道のように見えます。何時間ものロギングを通じて、私が実行したときの間のどこかにそれを突き止めることができるようです -
[locManager startUpdatingLocation] と - の開始
(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
それがシミュレーターで機能する理由を説明しています。私はロケーション能力を検出せず、そのロケーションコードを実行しません。
[locManager startUpdatingLocation] の直前と直後にインラインで NSLog を実行すると、NSString オブジェクトが割り当てられて存在します。しかし、アプリが実行されて locationManager にヒットすると、NSLog は NSString の割り当てが解除され、なくなったことを示します。この文字列オブジェクトは、場所の処理や機能とはまったく関係ありません。無関係の NSString。他のすべての潜在的な活動をコメントアウトし、すべての明示的なリリースコードをコメントアウトしましたが、それが発生した瞬間を見つけることができません.
lldb がウォッチポイントをサポートしていないようで、gdb がそれらをサポートしているように見えることにさらに不満を感じていますが、このバージョンでは機能しないようです。gdb はハードウェア ウォッチポイントを設定し、Xcode は実行中と表示しますが、30 分後も視覚的なアクティビティや中断はありません。
私はライオン、Xcode 4.1.1、そしてコーヒーを飲みすぎています。
このリリースされた NSString オブジェクトを、このような狭い範囲のアクティビティと限られたツールで見つけるには、どのようなアプローチをとればよいでしょうか?
debugging - GDBでウォッチポイントを設定する
私は巨大なコードベースを操作していて、特にゼロに設定されたときに、特定の変数の値(ファイルの1つの奥深くに埋め込まれている)を監視したいと考えています。
1)変数がグローバルスコープに属していない。最初に変数が定義されている関数にブレークポイントを設定してからウォッチポイントを設定するよりも良いオプションはありますか?
2)1のオプションを試した後、これを使用したフレーム外と言ってしばらくするとウォッチポイントが削除されることがわかります。このように、何度も追加する必要があるため、手順が面倒になります。回避策はありますか?
3)特定の変数が0(または特定の定数)に等しいかどうかを確認する方法はありますか?
debugging - ハードウェア ウォッチポイント - どのように機能しますか?
GDB ウォッチポイントはどのように機能しますか? 定義された場所でバイトレベルのアクセスを利用するために、同様の機能を実装できますか?