远程调试说明:
Windows远程调试有两种连接方式:无认证和Windows用户认证。两种调试方式:附加到进程、直接调试。这里介绍的是Windows用户认证下的直接调试方法。
1.先说明一下准备工作:
(1) 关闭两台机器的防火墙。
(2)两台机器在同一个局域网内,需要能够互相ping通。
(3)由于采用Windows认证,因此要求两台机器使用相同的用户名登录Windows,并且密码必须相同且不能为空。
2、打开VS项目,项目属性---->调试,如下图:
3.两台机器:VS项目所在机器为A,exe所在机器为B。 ?
上图中:
? ? ?在框 1 中选择远程 Windows 调试器。
框 2:远程 B 上要调试的 exe 程序的位置和绝对路径。
框3:这是Remote B上exe程序的工作目录,也就是exe所在的目录。
框 4:是远程 B 的 IP 地址
4. 将VS中内置工具Remote Debugger(32位或64位,取决于要调试的程序)复制到Remote B。
5. 以管理员身份运行Remote Debugger,选择Tools——>Options,如图所示选择,点击OK。
6. 远程机器配置完成后,返回本地计算机A,按F7编译生成.exe和.pdb文件,并将这两个文件复制到远程B的工作目录,即方框3中在步骤“2”目录中(注意:生成的exe和pdb文件的名称必须与步骤“2”中框2中的名称相同)。
然后就可以按F5进行调试了。与本地调试相同。
【补充说明】
》能否添加断点调试与是否使用Windows用户认证无关,关键是源代码必须与目标程序版本一致,且源代码同目录下有pdb文件目标计划”
关于 pdb 文件:
请参考网上解释:
http://www.sychzs.cn/itech/archive/2011/08/15/2136522.html
http://www.sychzs.cn/devcenter/jrobbins/pdb-files-what-every-developer-must-know
目前只有测试工作中使用比较频繁的:
智能指针
shared_ptr
#包括
std::shared_ptr a(新A);
----支持!还支持 make_shared
weak_ptr ----支持,毕竟这是辅助shared_ptr的指针模板unique_prt ----支持! ,但是不支持make_unique,这也很正常,毕竟这是C++14的语法。
综上所述,在VS2010中可以使用智能指针。
auto型自推导
向量
v_ints.push_back(1);
v_ints.push_back(2);
auto it = v_ints.cbegin();
std::cout << *it < auto a = make_shared(); 自动 b = a; ------支持! lambda 表达式 构造一个闭包:一个能够捕获作用域内变量的未命名函数对象。 c++11中有以下三种语法: [ 捕获 ] ( params ) -> ret_type { body } (1) [ 捕获 ] ( params ) { body } (2) [ 捕获 ] { body } (3) 理论上都是第一种语法的简化版本,可以根据需要使用, 闭包是具有上下文的函数。说白了就是一个有状态函数 函数是代码,状态是一组变量。将代码绑定到一组变量形成一个闭包。 C++中实现闭包的三种方法 重载运算符() 因为闭包是一个函数+一个状态,所以这个状态是通过隐式的this指针传入的。所以闭包必须是一个函数对象。因为成员变量是保存状态的优秀工具,所以实现了operator()运算符重载,并且该类的对象可以用作闭包。默认传入的this指针提供了访问成员变量的方式。 (其实这就是lambda和bind的原理。) 类 MyFunctor { 公众: MyFunctor(float f) : round(f) {} int 运算符()(float f) { return f + round; } 私人: 浮圆; }; 浮动轮 = 0.5; MyFunctor f(round); lambda 表达式 浮动轮 = 0.5; auto f = [=](float f) { return f + round; } ? C++11中的Lambda是闭包的实现。 boost::绑定/std::绑定 int boost_func(float f, float round) { 返回 f + round; } 浮动轮 = 0.5; boost::function 闭包的状态特定于其运行的上下文。闭包将存储它运行所需的上下文,从而确保创建闭包时的上下文在闭包运行时保持有效。 例如,round 是闭包的上下文。这种保存上下文的功能通常称为“捕获”或“绑定”。 capture可以自己写,比如MyFuctor f(round);或者你可以使用 boost::bind 。 vs2010测试: int make_i = 3; 自动 f = [=](int x){ std::cout << x << make_i << '\n'; };//这里;不能省略 f(make_i); -----支持! 支持匿名表达式意味着支持闭包。在C++中,闭包并不那么出名。毕竟这个概念是前端JS创造出来的。但是知道了lambda表达式,我们就可以精简代码了,以后有计划补充学习记录。你可以先参考这里。 for_each 可能的实施 模板 UnaryFunction for_each(首先输入,最后输入,UnaryFunction f) { for (;第一个!=最后一个;++第一个) { f(*第一个); } 返回 f; } 循环遍历所有元素,并使用f函数处理所有元素(迭代器)。 测试 for_each 中的 lambda 表达式 #包括 for_each(v_ints.begin(),v_ints.end(),[](int val){ cout << val << endl; }); ------支持! 基于范围的 for 循环 向量 v_ints.push_back(1); v_ints.push_back(2); for (const int& i : v_ints) // 通过 const 引用访问 std::cout << i << ' '; std::cout << '\n'; 编译错误。 ----不支持! 正则表达式 测试: std::string fnamesstring[] = {"foo.txt", "bar.txt", "baz.dat", "zoidberg"}; 向量 std::regex txt_regex("[a-z]+\\.txt"); for_each(fnames.begin(),fnames.end(),[&](const string &fname){ std::cout << fname << ": " << std::regex_match(fname, txt_regex) << '\n'; } ); -----支持! 绑定功能模板 函数模板bind为f生成一个转发调用包装器。调用此包装器相当于调用 f 并将其一些参数绑定到 args。 ---- 函数模板绑定为 f 生成一个前向调用包装器。调用此包装器相当于调用 f 并将其一些参数绑定到 args。 (机器翻译很感人) 我个人的理解是,绑定函数模板可以在更广的范围内使用某些函数,比如嵌套绑定子表达式函数、绑定类成员函数,甚至类成员变量。 验证码: #包括 void f(int n1,int n2,int n3,int n4,int n5){ cout << n1 <<" "<< n2 <<" "< } 使用命名空间 std::placeholders; void f(int n1,int n2,int n3,int n4,int n5); auto b = 绑定(f,2,_1,_2,4,5); b(100,200); -----支持! 其他 vector 可能的修改: int ints[] = {1,2,3,4,5,6,2,4,3}; 向量 转载于:https://www.sychzs.cn/Stultz-Lee/p/10036207.html VS2010 + OpenCV2.4.3 + Windows 窗体应用程序 转载地址:http://www.sychzs.cn/detail/gdwuyihua/4814502 (注:如需引用本文,请先征得我的同意!) (原创)VS2010中Windows Form应用中OpenCV的实现 以下是我亲自验证的,包括详细具体的安装、编译和注意事项,完全可以参考!希望能够帮助OPENCV爱好者(尤其是新人)少走弯路。如果需要源代码,可以邮件询问(附件)。 VS2010 + OpenCV2.4.3 ================================================= == ===== 1.OpenCV的编译安装: 1.解压OpenCV-2.4.3.exe -> D:/OpenCV/Resources/OpenCV-2.4.3/opencv 2. 运行 CMake...为 VS 编译... 源代码在哪里:D:/OpenCV/Resources/OpenCV-2.4.3/opencv 构建二进制文件(目标)的位置:D:/OpenCV/Resources/OpenCV-2.4.3/opencv/vs2010 配置:选择 Visual Studio 10/? 生成:生成目标 3.打开D:/OpenCV/Resources/OpenCV-2.4.3/opencv/vs2010,使用对应版本的VS打开OpenCV.sln... A. 编译 OpenCV 解决方案的 Debug 版本: 1. 编译 OpenCV 解决方案(Debug):在 VS 工作区界面左侧的 Solution Explorer 中选择最上面的解决方案“Solution 'OpenCV' (61projects)”,确保 SolutionConfig 为 Debug,右侧为-点击执行Build Soluton(编译计划); 2.编译ALL_BUILD项目(Debug):在VS工作区界面左侧Solution Explorer列表中选择项目“ALL_BUILD”,确认Solution Configure为Debug,右键执行Build(编译项目) ; 3.编译CMakeTargets\INSTALL项目(Debug):在VS工作区界面左侧Solution Explorer列表中选择“CMakeTargets\INSTALL”项目,确保Solution Configure为Debug,右键执行构建(编译项目); B.编译OpenCV解决方案发布版本: 1.编译OpenCV解决方案(Release):在VS工作区界面左侧的Solution Explorer中选择最上面的解决方案“Solution 'OpenCV'(61个项目)”,确认Solution Configure为Release,右侧-点击执行Build Soluton(编译计划); 2、编译ALL_BUILD项目(Release):在VS工作区界面左侧Solution Explorer列表中选择项目“ALL_BUILD”,确认Solution Configure为Release,右键执行Build(编译项目) ); 3、编译CMakeTargets\INSTALL项目(Release):在VS工作区界面左侧Solution Explorer列表中选择“CMakeTargets\INSTALL”项目,确认Solution Configure为Release,右键执行构建(编译项目); 4.查看编译结果: D:\OpenCV\Resources\OpenCV-2.4.3\opencv\vs2010\bin:有两个目录Debug/Release及相关文件资源; D:\OpenCV\Resources\OpenCV-2.4.3\opencv\vs2010\lib:有两个目录Debug/Release及相关文件资源; D:\OpenCV\Resources\OpenCV-2.4.3\opencv\vs2010\install:有三个目录bin/include/lib及相关文件资源; 其他不需要 5. 应用配置: 将编译好的目录 D:\OpenCV\Resources\OpenCV-2.4.3\opencv\vs2010\install 复制到 C:\ 并重命名为 C:\opencv; b.添加OSXP系统变量Path:c:\opencv\bin(供OpenCV exe应用程序调用); c.添加OSXP系统变量OPENCV:值为:C:\opencv; --------------------------------------------------------- 2. 程序项目配置: 特别注意:配置工程属性时,要注意Debug/Release版本配置项的统一,否则会导致可能的编译错误,如:Common Language Runtime Support(公共语言运行时支持) :Common Language Runtime Support/(clr)(公共语言运行时支持(/clr)),否则会导致编译错误! 6.VS应用程序(VS2010.控制台应用程序): 6.1,VS项目属性中的设置如下: 6.1.1,配置属性/... a,一般: MFC 的使用:使用标准 Windows 库 ATL 的使用:不使用 ATL Common Language Runtime Support: No Common Language Runtime Support(无公共语言运行时支持,其他选项会导致错误) b,C/C++/通用: 附加包含目录:C:\opencv\include;c:\opencv\include\opencv;C:\opencv\include\opencv2(可以检查从父级继承或项目默认值)或项目默认值)) c,链接器/通用: 附加库目录:C:\opencv\lib(您可以选中从父级或项目默认继承) 上面两个设置b、c(附加包含目录、附加库目录)可以替换为以下d中的等效设置: d,(VS2005没有此项)VC++目录: 包含目录:C:\opencv\include;c:\opencv\include\opencv;C:\opencv\include\opencv2(您可以选中从父级或项目默认继承默认值)) 库目录:C:\opencv\lib(您可以选中从父级或项目默认继承) e、链接器/输入/附加库:引入项目属性的库: 发布版本:............ opencv_core243.lib opencv_highgui243.lib opencv_video243.lib opencv_photo243.lib opencv_calib3d243.lib opencv_contrib243.lib opencv_features2d243.lib opencv_flann243.lib opencv_gpu243.lib opencv_imgproc243.lib opencv_legacy243.lib opencv_ml243.lib opencv_nonfree243.lib opencv_objdetect243.lib opencv_stitching243.lib opencv_ts243.lib opencv_videostab243.lib 调试版本................................ opencv_core243d.lib opencv_highgui243d.lib opencv_video243d.lib opencv_photo243d.lib opencv_calib3d243d.lib opencv_contrib243d.lib opencv_features2d243d.lib opencv_flann243d.lib opencv_gpu243d.lib opencv_imgproc243d.lib opencv_legacy243d.lib opencv_ml243d.lib opencv_nonfree243d.lib opencv_objdetect243d.lib opencv_stitching243d.lib opencv_ts243d.lib opencv_videostab243d.lib 6.2,在VS项目包含源码引用: // 可用... #include #include #include #pragma comment( lib, "opencv_highgui243d.lib" ) #pragma comment( lib, "opencv_core243d.lib" ) #pragma comment( lib, "opencv_ml243d.lib" ) #pragma comment( lib, "opencv_imgproc243d.lib" ) 使用命名空间 cv; 3. 程序代码(按钮事件): //按钮显示事件处理... namedWindow("show_image",WINDOW_AUTOSIZE); Mat src = imread("d:/opencv.jpg"); //while(1) { imshow("show_image", src); //char c = waitKey(0); //if(27 == ' ') //返回0; } //返回0; ================================================= == =============================================== 资源:VS2010 + OpenCV2.4.3 + Windows 窗体应用程序 1. VS 项目属性中的设置如下: 6.1.1,配置属性/... a,一般: MFC 的使用:使用标准 Windows 库 ATL 的使用:不使用 ATL 公共语言运行时支持:公共语言运行时支持/(clr) b,C/C++/通用: 附加包含目录:c:\opencv\include;c:\opencv\include\opencv;c:\opencv\include\opencv2(可以检查从父级继承或项目默认值)或项目默认值)) c,链接器/通用: 附加库目录:c:\opencv\lib(您可以选中从父级或项目默认继承) 上面两个设置b、c(附加包含目录、附加库目录)可以替换为以下d中的等效设置: d,(VS2005没有此项)VC++目录: 包含目录:c:\opencv\include;c:\opencv\include\opencv;C:\opencv\include\opencv2(您可以选中从父级或项目默认继承默认值)) 库目录:c:\opencv\lib(您可以选中从父级或项目默认继承) e、链接器/输入/附加库:引入项目属性的库: 发布版本:............ opencv_core243.lib opencv_highgui243.lib opencv_video243.lib opencv_photo243.lib opencv_calib3d243.lib opencv_contrib243.lib opencv_features2d243.lib opencv_flann243.lib opencv_gpu243.lib opencv_imgproc243.lib opencv_legacy243.lib opencv_ml243.lib opencv_nonfree243.lib opencv_objdetect243.lib opencv_stitching243.lib opencv_ts243.lib opencv_videostab243.lib 调试版............ opencv_core243d.lib opencv_highgui243d.lib opencv_video243d.lib opencv_photo243d.lib opencv_calib3d243d.lib opencv_contrib243d.lib opencv_features2d243d.lib opencv_flann243d.lib opencv_gpu243d.lib opencv_imgproc243d.lib opencv_legacy243d.lib opencv_ml243d.lib opencv_nonfree243d.lib opencv_objdetect243d.lib opencv_stitching243d.lib opencv_ts243d.lib opencv_videostab243d.lib 2. 在 VS 项目源代码中包含引用: //包含引入OpenCV所需的文件... #include #include #include //选择调试/发布... #ifdef _DEBUG #pragma comment( lib, "opencv_highgui243d.lib" ) #pragma comment( lib, "opencv_core243d.lib" ) #pragma comment( lib, "opencv_ml243d.lib" ) #pragma comment( lib, "opencv_imgproc243d.lib" ) #else #pragma comment( lib, "opencv_highgui243.lib" ) #pragma comment( lib, "opencv_core243.lib" ) #pragma comment(lib, "opencv_ml243.lib") #pragma comment( lib, "opencv_imgproc243.lib" ) #endif 使用命名空间 cv; 3. 程序代码(按钮事件): //按钮显示事件处理... namedWindow("show_image",WINDOW_AUTOSIZE); Mat src = imread("../opencv.jpg"); //while(1) { imshow("show_image", src); //char c = waitKey(0); //if(27 == ' ') //返回0; } //返回0;