首页 > 解决方案 > GDB 在调试时多次显示行

问题描述

我正在调试一个简单的可执行文件,它附加了一个 dll。当我在执行 gdb 的“step up”选项时,我正在逐行进行,没有进入函数内部,但有时即使没有循环也没有任何 goto 语句,我看到前面的语句再次被执行,在做“加强”的同时。

我将调试会话的中间输出放在下面,谁能告诉这可能是什么问题?

19      file = getenv("DSINSTALL");
(gdb) n
20      file += "/test/rewriteshims.txt";
(gdb) n
21      FILE* fp = fopen(file.str(), "r");
(gdb) 
22      if (!fp) {
(gdb) 
21      FILE* fp = fopen(file.str(), "r");
(gdb) 
22      if (!fp) {
(gdb) 
55          if (strcmp(type, "func") == 0) {
(gdb) 

如您所见,第 21,22 行再次被执行。 这也发生在其他地方。

这与我的编译方式有关吗?请建议,这使得很难正确运行代码流。

代码片段如下:

file = getenv("DSINSTALL");
file += "/test/xyz.txt";
FILE* fp = fopen(file.str(), "r");
if (!fp) {
    perror(file.str());
    return false;
}
char buf[200];
bool err = false;
int line = 0;
while (fgets(buf, sizeof buf, fp)) {
    line++;
    char* nl = strchr(buf, '\n');
    if (nl) {
        *nl = '\0';
    }....

此外,文件已正确打开

标签: c++debugginggdb

解决方案


推荐阅读