如何让GDB运行程序时args[0]与命令行执行结果一致?
问题
正常执行程序(不使用GDB)时,argv[0]为命令行输入的内容(如./a.out);但使用GDB运行程序时,argv[0]会包含完整路径(如/home/prasads/./a.out)。请问无需修改代码的情况下,如何让GDB运行时的argv[0]与命令行执行时的结果一致?
代码示例
#include <stdio.h> // 带参数的main函数 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
解决方案
有两种无需修改代码的简单方法:
方法一:启动时显式指定argv[0]
在GDB交互模式下,使用run命令直接传入目标argv[0]值:
(gdb) run ./a.out
执行后,程序的argv[0]会变为./a.out,与命令行直接执行的结果一致。
方法二:预先设置argv[0]
先通过set argv0命令指定argv[0]内容,再启动程序:
(gdb) set argv0 ./a.out (gdb) run
这种方式适合需要多次启动程序,且希望每次argv[0]保持一致的场景。
内容的提问来源于stack exchange,提问作者user2043396
相关产品推荐
相关产品推荐

