GDB在调试时多次显示行

时间:2018-12-12 12:25:54

标签: c++ debugging gdb

我正在调试简单的可执行文件,其中附加了一个dll。 在执行gdb的“逐步”选项时,我逐行进行操作,而没有获得内部函数,但是有时即使没有循环,也没有任何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';
    }....

此外,文件已正确打开

0 个答案:

没有答案