You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:57:00