当我正常运行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相同的输出作为命令提示符?
3条答案
按热度按时间anauzrmj1#
这与
C
、C++
或任何其他语言无关。这是操作系统工作方式的产物。我所知道的所有现代操作系统,无论是类Unix还是Windows,都需要新进程的创建者提供可能提供给新进程的信息作为其参数向量。这包括成为argv[0]
的内容。父进程可以在这个字段中指定任何它喜欢的东西,包括随机的垃圾或什么都不指定。字段是否包含完整路径或相对路径将取决于程序员在编写时想做什么。xxslljrj2#
有没有一种方法,而不必改变代码,我可以得到GDB相同的输出作为命令提示符?
可以:您可以使用exec-wrapper将
argv[0]
设置为任何您想要的值。P.S.这个GDB bug也可能与此相关。
nbysray53#
当您使用GDB运行程序时,GDB默认情况下将使用可执行文件的绝对路径。
如果你真的想让
GDB
显示程序的相对路径,你可以运行**(GDB内部)**它会运行它,但现在
argc
将等于2
,第二个参数将是你想要的。