Visual Studio 2017怎样调试main函数含参数的程序(C++、OpenCV)

    在使用C++和OpenCV标定相机时,用到了OpenCV提供的例程imagelist_creator.cpp。这个源程序的主函数是带参数的,无法直接在Visual Studio的IDE下运行(编译后会闪退),需要在编译得到exe程序后使用win键+R呼出CMD后在命令行界面带参数运行。

    呼出命令行界面后,首先输入:"F:"进入想运行的程序所在的盘符,然后再输入“cd SoftwareData\OpenCV\Study\Calibration_sample...”(根据你自己的盘符和目录设置),将CMD运行环境转移到需要运行的exe程序所在的目录。注意,cd是转移目录的命令,即:change directory。
    在运行含有参数的exe程序时,需要在CMD环境下直接输入可执行程序名称(不含扩展名“.exe”),然后不立刻按回车键运行,而是继续输入空格,然后输入后续的参数,输入结束后再按回车运行。
    这里需要强调的是,带参数的exe程序并不是运行之后输入参数,而是在运行之前就随着执行命令一起输入了参数。

    我目前还没能让带参的cpp程序直接在IDE界面下运行起来(可能也有对应的设置,比如为main函数添加参数之类的),只是在CMD“大黑屏”命令行环境下运行了。

——————分割线,下面是吐槽——————

    对于编程初学者而言,最早学到的C语言或C++语言中一定会学到,主程序的开头是main函数。而根据使用的编译环境的不同,这个main函数会有很多不同的长相。

    我最早在本科学习C语言时(那是2010年左右吧),老师推荐使用的是那个经典的TurboC“大蓝屏”的界面,记得当时写的main函数都是"void main(){ }"这种结构。然后因为专业原因就好几年没再用C语言了。

    后来,因为项目关系,为了用OpenCV库,我开始学习了C++,用上了Visual Studio这种集成开发环境(IDE),然后发现教科书上的例程都是“int main() { return 0;}”这种格式了,于是也就跟着改了过来(貌似这个才是正确的写法吧)。

    最近在弄相机内参标定的东西,因为感觉Matlab自带的标定工具"calib_gui"好像不太好用(我在用的还是当年的Matlab2012a,好像还是个破解版,据说新版的各种工具都很好用,懒得装了),因此想试试OpenCV的标定程序。但从OpenCV库里把例程的cpp拿出来看的时候,我作为小白还是懵逼了一下,因为它的main函数里面是带参数的。好吧,我承认我没见过世面,摊手。

    其实,这是因为我们初学者习惯了main函数不带参数的那些练习程序。我们初学者对编程的认识一直都停留在那个IDE界面上,感觉程序好像都是在这个界面上在跑,但其实并不是这样的。程序其实都是在计算机的CPU上跑起来的(大神的程序都是在心中默默运行的)。你完全可以把main看作一个被计算机CPU直接调用的函数,跟我们编写的让main函数调用的子函数没有太大区别。

    我们在IDE界面里随意修改变量值其实只是为了初学者学习编程方便修改程序。但对于一个开发实际工程项目的人来说,他编写的代码最后都是为了生成那个可以直接鼠标双击就能在任何Windows系统的PC机上点开的.exe程序,而不是让用户用IDE打开源代码再修改里面的变量。而且,很多情况下,你肯定只能给用户提供可执行程序而不会给他源代码,因为源代码可以用来做其他二次开发,商业价值太高。

    有时,开发者想提供给用户一个可以根据用户自己喜好修改输入参数的exe程序,这时就需要用到带参数的main函数了。以我这次遇到的imagelist_creator.cpp(OpenCV提供的例程)为例,它的主函数在声明的过程中就会出现

int main(int ac, char** av)

这样的声明,然后后面还会有要求输入基本参数的相关帮助。我在IDE里面运行了一下这个.cpp,然后,直接闪退了。。。

    然后,我在项目文件夹里找到对应的exe程序,双击了仍然无法打开,会直接闪退。。。

    然后搜了一些博客,说需要在CMD环境下运行该程序,然后还需要带着参数运行。我又试了半天,最后终于成功运行起来了。具体方法,看本文开头即可。
   

    

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值