我正在调试简单的可执行文件,其中附加了一个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';
}....
此外,文件已正确打开