有没有办法用gdb用相对路径做fopen?

Is there a way to do fopen with relative path with gdb?

我正在尝试使用相对路径执行 fopen()。 代码很简单:

#include <stdio.h>
#include <stdlib.h>


int main (void){

    char filename[FILENAME_MAX]="test.txt";
    FILE *fin;
    if ((fin=fopen(filename,"r"))==NULL)
    {
        printf("File not found.");
        exit(EXIT_FAILURE);
    }
    else
    {
        printf("opened!");
    }
    
    return 0;

}

我尝试了两种方法:

  1. 用 gcc 编译代码,然后 运行用 ./a
  2. 编译它
  3. 在 vscode 上使用 gdb build & 运行,设置完全来自 https://medium.com/@GorvGoyl/run-debug-intellisense-c-c-in-vscode-within-5-minutes-3ed956e059d6

我试过将文件名改成几个东西,结果如下:

char filename[FILENAME_MAX]="test.txt";

gcc: 打开了!

gdb: 找不到文件

char filename[FILENAME_MAX]=".\test.txt";

gcc: 打开了!

gdb: 找不到文件

char filename[FILENAME_MAX]="C:\fullfolderpath\test.txt";

gcc: 打开了!

gdb: 打开了!

有没有办法在使用gdb时用相对路径打开txt文件?这些文件将与源代码和编译后的程序存储在同一目录中。

使用至少perror(3) when fopen(3)失败,当然阅读这些功能的文档

所以代码:

if ((fin=fopen(filename,"r"))==NULL)
{
    perror(filename);
    printf("File not found.\n");
    exit(EXIT_FAILURE);
}

在使用前阅读 printf(3) and of exit(3) 的文档。

当然,还要阅读 GCC and of GDB 的文档。

我建议使用 gcc -Wall -Wextra -g foo.c -o foo

编译您的 foo.c

在 Linux 上,也考虑使用 strace(1) (read of course syscalls(2)...) 来了解程序的行为。

如果您使用其他操作系统或编译器请阅读您的编译器和操作系统的文档。 Windows请参考WinAPI.