Linuxx64プロセスでHeisenbugを追いかけています。(デバッガーまたはstraceを使用してプロセスにアタッチすると、問題が発生することはありません。)コードが障害を検出し、その方法でgdbをアタッチすると、無限ループに入ることができましたが、ファイルが表示されるだけです。動作しているはずの記述子(fd)は無効になりました。私は本当にfdの履歴を取得したいので、straceを試しますが、もちろんそれでは問題のレポはできません。
他の要因は、gdb/straceの問題がタイミングであることを示しています。straceを実行して、 -etrace=desc
または-eraw=open
ramdiskに出力して、問題をトリガーする正しい方法でstraceのオーバーヘッドを削減できるかどうかを確認しましたが、成功しませんでした。strace +を実行してみましたが、straceよりも桁違いに遅くなっています。
私が接続しているプロセスは、一部はソースアクセス権のない商用バイナリであり、一部はプロセススペースにプリロードするコードであるため、printf
どこでも100%可能というわけではありません。
fdの履歴を追跡する方法についての提案はありますか?
更新: strace+に関するメモを追加