我有一个Octave(在CentOS 6.6上的4.0.0版本)代码,我通常像octave-cli mycode someargument
一样运行。
我想从Octave命令行解释器调试此代码。这是一个最小的工作示例:
$ cat somefunc.m
function somefunc
printf("hello world\n");
args = argv();
printf("args = %s\n", args{1});
endfunction
somefunc();
printf("this is the end\n");
此代码运行如下:
$ octave-cli somefunc.m somearg
hello world
args = somearg
this is the end
我希望能够从命令行调试此代码,并传递somearg
,以便argv()
抓住它。例如。
$ octave-cli
octave:1> dbstop somefunc 4;
octave:2> somefunc somearg
stopped in /some/path/somefunc.m at line 4
4: printf("args = %s\n", args{1});
hello world
debug> dbcont
error: somefunc: A(I): index out of bounds; value 1 out of bound 0
error: called from
somefunc at line 4 column 5
octave:2>
但我无法弄清楚如何让argv()
读取命令行参数。我需要换一个丑陋的开关吗?类似的东西:
if(is_interactive_mode)
args = "somearg";
else
args = argv();
end
在Python中,我不会遇到这个问题,例如: python -m pdb ./somefunc.py somearg
和C(使用Gdb)我会在starting gdb时传递参数,或者传递给命令run
。
问题:从octave命令行交互运行时,如何将命令行参数传递给程序?
答案 0 :(得分:0)
最好的方法是使用两个分开的文件:
% somescript.m
args = argv();
printf("args = %s\n", args{1});
somefunc(args{1});
printf("this is the end\n");
%somefunc.m
function somefunc(func_arg)
printf("hello world\n");
printf("func_arg=%s\n",func_arg)
endfunction
然后,从您的OS命令行:
$ octave-cli somescript.m somearg
args = somearg
hello world
func_arg=somearg
this is the end
并从Octave命令行:
octave:2> somefunc("somearg")
hello world
func_arg=somearg
请注意,在您的示例中,由于函数名称与源文件名匹配,因此您将在源内部调用该函数,并且代码的最后一部分(即“ this is end”)将永远无法到达。 / p>