4

クラッシュが発生する前に、いくつかのグローバル変数を検査したいと思います。この問題は特定のスタック トレースでのみ再現され、最も内側の関数 (またはスタックの他の関数) にブレークポイントを設定しても、十分に近づくことはできません。

スタックの一番上にこのようなものが含まれている場合にのみ、ブレークの結果を達成できますか?

#0 __GI_connect
#1 curl_connect
#2 get_file
#3 init_assets

やってるだけ

b init_assets
c
b get_file
c
...

init_assets が複数回呼び出され、curl を毎回呼び出すわけではないため、gdb は curl を使用する無関係なコードで中断します。

後で編集:別の方法は次のとおりです。

b inner_func
ignore 1 10000
r
# app crashes
info b

Breakpoint 1 has been hit 10 times.

次に、ブレークポイントを削除して再度追加し、9 回だけ無視します。アプリを再度実行すると、gdb は 10 回目 (inner_func がクラッシュしたとき) に停止します。

rr実行の変動が大きすぎる場合は、アプリを mozilla に記録することもできます。

4

1 に答える 1