将 getopt 与 gdb 一起使用 [英] using getopt with gdb

查看:37
本文介绍了将 getopt 与 gdb 一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

刚刚将 getopt 合并到我的 main() func

have just incorporated getopt into my main() func

getopt 为每次调用设置全局变量optarg

getopt sets the global variable optarg for each call

使用 gdb 单步执行 main(),在 getopt() 之后调用 optarg 总是 NULL (eg (gdb) p optarg) 但 printf("%s ", optarg) 按预期输出 cmd 行 arg

stepping through main() with gdb, after getopt() call optarg is always NULL (e.g. (gdb) p optarg) yet printf("%s ", optarg) outputs the cmd line arg as expected

发生了什么事?为什么两者不一样?

whats going on? why are the two not the same?

这是 gdb 的问题以及它如何尝试检查全局变量还是发生了其他事情?

Is this an isue with gdb and how it trys to inspect globals or is something else going on?

推荐答案

可能相关:Bug13800 - gdb 不打印 getopt 相关值的正确值

另请注意,即:

(gdb) n
opt: 111, arg, 
0x804a040
0x804a034
0x804a020
0x804a030

(gdb) printf "%p
%p
%p
%p
", &optarg, &opterr, &optind, &optopt
0x2ae760
0x2ab0f4
0x2ab0f8
0x2ab0f0

地点:

(gdb) l
6   int main(int argc, char *argv[])
7   {
8       int c;
9       while ((c = getopt(argc, argv, ":abf:o:")) != -1) {
10          printf("opt: %d, %s, 
"
11              "%p
%p
%p
%p
",
12              c, optarg,
13              &optarg, &opterr, &optind, &optopt);

这篇关于将 getopt 与 gdb 一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆