2

我真的很喜欢在 Borland C++ 中使用一些简单的界面,因此我在笔记本电脑上安装了 cygwin 和 gcc/gdb/vim 等(不幸的是,我不能在这里安装 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 或杀戮来终止此调试。我认为 gdb 挂起,因为它尝试使用 2 个线程并且出现问题。这是信息线程:

(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 个线程。

我的问题是:我可以对 gdb 说无论如何只使用 1 个线程吗?

顺便说一句,在我更新笔记本电脑和 cygwin 之前,我没有遇到同样的问题。我试图回滚 gdb(7.3.50 实际上是 cygwin 建议的最旧的),但它没有帮助。

谢谢

4

0 回答 0