c++ args[0]在GDB中运行时始终包含完整路径

zlhcx6iw  于 2023-06-07  发布在  其他
关注(0)|答案(3)|浏览(199)

当我正常运行execute(没有GDB)时,args[0]是我在命令提示符下输入的。但是当我使用GDB运行时,它包含完整路径。GDB有没有办法将args[0]设置为与命令提示符相同?
代码如下:

#include <stdio.h>

// defining main with arguments
int main(int argc, char* argv[])
{
        printf("You have entered %d arguments:\n", argc);

        for (int i = 0; i < argc; i++) {
                printf("%s\n", argv[i]);
        }
        return 0;
}

单独站立:

./a.out
You have entered 1 arguments:
./a.out

关于GDB:

gdb ./a.out
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
(gdb) run
Starting program: /home/prasads/./a.out
You have entered 1 arguments:
/home/prasads/./a.out

有没有一种方法,而不必改变代码,我可以得到GDB相同的输出作为命令提示符?

anauzrmj

anauzrmj1#

这与CC++或任何其他语言无关。这是操作系统工作方式的产物。我所知道的所有现代操作系统,无论是类Unix还是Windows,都需要新进程的创建者提供可能提供给新进程的信息作为其参数向量。这包括成为argv[0]的内容。父进程可以在这个字段中指定任何它喜欢的东西,包括随机的垃圾或什么都不指定。字段是否包含完整路径或相对路径将取决于程序员在编写时想做什么。

xxslljrj

xxslljrj2#

有没有一种方法,而不必改变代码,我可以得到GDB相同的输出作为命令提示符?
可以:您可以使用exec-wrapperargv[0]设置为任何您想要的值。
P.S.这个GDB bug也可能与此相关。

nbysray5

nbysray53#

当您使用GDB运行程序时,GDB默认情况下将使用可执行文件的绝对路径。
如果你真的想让GDB显示程序的相对路径,你可以运行**(GDB内部)**

cd /path/to/dir
run ./out

它会运行它,但现在argc将等于2,第二个参数将是你想要的。

相关问题