Borland C++ のような単純なインターフェイスを使用するのが本当に好きなので、ラップトップに gcc/gdb/vim などで cygwin をインストールしました (残念ながら、ここに Linux をインストールすることはできません :( )
私が抱えている問題は次のとおりです。並列化されていないプログラムをデバッグしようとすると、fe:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int i = argc;
fprintf(stdout, "Hello World %d\n", i);
return 0;
}
私のgdbがハングします:
$ gdb a.exe
GNU gdb (GDB) 7.3.50.20111026-cvs (cygwin-special)
...
Reading symbols from /cygdrive/c/programming/temp/a.exe...done.
(gdb) b main
Breakpoint 1 at 0x401179: file helloworld.cpp, line 4.
(gdb) r
Starting program: /cygdrive/c/programming/temp/a.exe
**[New Thread 12132.0x11a4]
[New Thread 12132.0x32ac]**
Breakpoint 1, main (argc=1, argv=0x28ac60) at helloworld.cpp:4
4 int main(int argc, char **argv) {
(gdb) n
5 int i = argc;
(gdb)
6 fprintf(stdout, "Hello World %d\n", i);
(gdb) p i
$1 = 1
(gdb) n
.......... nothing here
CC、CZ、または強制終了によってこのデバッグを終了することはできません。2 つのスレッドを使用しようとして何か問題が発生するため、gdb がハングすると思います。情報スレッドは次のとおりです。
(gdb) info threads
Id Target Id Frame
2 Thread 10160.0x31e8 0x775cf8e5 in ntdll!RtlUpdateClonedSRWLock () from /cygdrive/c/Windows/system32/ntdll.dll
* 1 Thread 10160.0x15a8 main (argc=1, argv=0x28ac60) at helloworld.cpp:4
私にとっては、1 スレッドのプログラムが 2 スレッドで実行されるというのはかなり奇妙です。Linux で gdb を確認しましたが、gdb は 1 つのスレッドを使用しています。
私の質問は次のとおりです:とにかく1つのスレッドのみを使用するようにgdbに言うことができますか?
ところで、ラップトップとcygwinを更新するまで、以前は同じ問題はありませんでした。gdbをロールバックしようとしました(実際には7.3.50がcygwinが提案する最も古いものです)が、役に立ちません。
ありがとうございました