マルチスレッドプロセスがあり、gdb
コマンドを使用してattach
コマンドを使用してトレースする場合は、どのスレッドに接続しますか(現在実行中かメインなど)?私はinfo threads
でそれを発見できると知っていますが、デフォルトで選択するスレッドを知りたいと思います。スレッドgdbがデフォルトで接続します
0
A
答えて
1
Linuxの場合、gdbが接続されると、すべてのスレッドがptrace
コマンドで停止します。
gdbのデフォルトはC/C++アプリケーションのメインスレッドです。プロセスにアタッチして 'bt'を実行すると、 'main'のスタックがリストされます。
ただし、すべてのスレッドで利用可能です。 gdbは/proc
ファイルシステム内のスレッド情報を見ることができます。 procにはtasks
エリアの各スレッドに関する情報が含まれています。スタックアドレスの詳細はstat
ファイルとmaps
ファイルにあります。各スレッドのレジスタ値に関する詳細も利用できます。
私はしばしば、マルチスレッドアプリケーションを実行するとgdbがスレッドからスレッドにジャンプする原因が疑問に思っていました。私は、gdbはまだカーネルスケジューラの恩恵を受けていると思うので、スレッド上のステップが、CPUリソースとブレークポイントを起動させる別のスレッドにつながる可能性があります。
関連する問題
- 1. デバッガを接続するまでスレッドがハングします
- 2. デフォルトDeployd MongoDB接続
- 3. NucleoとGDBとの接続方法は?
- 4. Androidスレッドに接続する
- 5. 複数のスレッドがPostfixサーバに接続していますか?
- 6. gdbでアンドロイドネイティブアプリに接続すると、デバイスにアプリが閉じます
- 7. デバイスに接続するGDB用のUIはありますか?
- 8. 別のスレッドで接続をリッスンする
- 9. スレッドでサーバーへの接続を維持していますか?
- 10. 接続されたMysqlスレッドは1-3ですが、接続が多すぎます
- 11. ソケットクライアント+スレッド+ Android +接続ステータス
- 12. php.iniのデフォルトPHP mysqli接続
- 13. Springs RestTemplateのデフォルト接続プール
- 14. pymongoデフォルトのデータベース接続
- 15. 接続プールはスレッドへの接続を許可できません
- 16. Docker-machineがデフォルトのマシンに接続できません(Windows)
- 17. MySQLデータベースに接続できません - デフォルトのドライバが
- 18. C#別のスレッドでデータベースに接続
- 19. Android - 別のスレッドでソケットに接続
- 20. C++でのスレッドのRedis接続
- 21. スレッド接続によりシステムが遅くなりますか?
- 22. netbeans 6.91とgdb - 別のユーザーが実行しているプロセスに接続する
- 23. java.net.ConnectException:接続がタイムアウトしました:Eclipseで接続
- 24. RedisClusterClient、スレッドごとに1つの接続または1つの接続
- 25. gdbデバッガ接続を設定するには?
- 26. 接続が失敗し、接続できません
- 27. 異なるMySQL接続が別のスレッドに存在しますか?
- 28. 接続が成功するまでBluetoothソケットの接続を継続しよう
- 29. PHPでfsockopenに接続できません(接続がタイムアウトしました)
- 30. GDBで編集し続ける
はい、私はそれも常にメインスレッドに接続していることに気付きましたが、それを保証する正式な文書があるのだろうかと思います。 – PepeHands
スレッドからスレッドへのステップについては、gdbのドキュメントにいくつかの注意事項があります:https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_39.html#SEC40 _特に、GDBはシングルステップできませんすべてのスレッドはロックステップにあります。スレッドスケジューリングはデバッグターゲットのオペレーティングシステム(GDBによって制御されない)までであるため、現在のスレッドが1つのステップを完了している間に、他のスレッドが複数のステートメントを実行することがあります。さらに、一般に、他のスレッドは、クリーンな文境界ではなく、文の途中で停止します。 – PepeHands