双击运行与vs调试运行程序区别


一、结论

vs调试双击启动
调试
环境变量工程设置库目录等确保程序找到相关依赖系统默认环境变量与程序所在目录查找相关依赖
启动参数项目属性配置cmd启动输入

二、豆包原话

在 Visual Studio(VS)中启动可执行程序和双击启动可执行程序存在以下一些区别:
调试功能方面
VS 中启动:
当在 VS 中启动可执行程序时,如果程序是在调试模式下配置(通常设置为 Debug 模式),可以方便地利用 VS 强大的调试功能。例如,可以设置断点,让程序执行到指定代码行时暂停,以便查看此时各个变量的值、内存状态、调用堆栈等关键信息,能精准地排查代码中的逻辑错误、运行时错误等。
还可以进行单步调试(逐语句、逐过程等方式),细致地跟踪代码的执行流程,清楚地了解程序具体是如何一步步运行的,这对于开发过程中定位和修复问题极为有用。
双击启动:
双击可执行程序启动仅仅是运行该程序,不具备调试相关的功能,无法直接查看程序运行过程中的内部细节情况。如果程序出现错误导致崩溃等情况,很难直观知晓具体是代码哪部分引发的问题,只能从一些外在的报错提示(比如弹出的错误对话框等)大致判断,对于查找深层次原因较为不便。
环境变量与工作目录方面
VS 中启动:
VS 在启动可执行程序时,会根据项目的配置来设置相应的环境变量和工作目录等信息。例如,它会确保程序能正确找到项目中关联的动态链接库(DLL 文件等)所在路径(通过配置好的包含目录、库目录等相关设置),使得程序可以顺利加载依赖项进行运行。
工作目录通常也会按照项目设定来指向合适的位置,方便程序按照预期的相对路径去读取配置文件、资源文件等内容。
双击启动:
双击启动主要依赖系统的默认环境变量配置以及可执行程序所在的实际目录情况来确定相关路径等。如果程序依赖的一些外部文件(如配置文件、DLL 文件等)存放位置不在系统默认能识别的路径下,可能就会出现找不到文件的情况,导致程序运行出错,比如提示缺少 DLL 文件或者配置加载失败等问题。
启动参数方面
VS 中启动:
在 VS 中可以方便地设置启动参数(命令行参数)传递给可执行程序,通过项目属性等相关配置界面,开发人员可以根据需要填写不同的参数值,来模拟程序在不同运行条件下的行为,便于测试程序针对不同输入的响应情况。
双击启动:
若要传递特定的启动参数,通常需要手动在命令提示符(CMD)或者 PowerShell 等命令行界面中,进入到可执行程序所在目录后,再输入程序文件名加上相应参数来启动,操作相对没有在 VS 中那么便捷直观,尤其是对于不太熟悉命令行操作的用户来说。
总体而言,VS 中启动可执行程序更多是服务于开发调试阶段,便于开发者对程序进行测试、找错和改进;而双击启动可执行程序则是常规的、脱离开发环境的运行方式,更贴近普通用户日常使用软件的情形。

三、打包程序

所以打包程序时需要将缺少的 DLL 文件拷贝到可执行程序的同目录下,或者拷贝到某个文件夹下设置环境变量指定的路径,其中有三个注意点,直接用豆包原话:
依赖关系复杂:
有些 DLL 文件自身可能还依赖其他的 DLL 文件,仅仅把直接提示缺少的那个 DLL 拷贝过去是不够的。如果其依赖的其他 DLL 依然在系统找不到的位置,程序依然会因为无法完整加载所有依赖项而运行出错,甚至可能出现新的找不到 DLL 的报错提示。
版本冲突:
即使把缺少的 DLL 放到了同目录下,但如果该 DLL 存在版本冲突问题,比如程序原本期望调用的是该 DLL 的某个旧版本的特定功能接口,而拷贝过去的是新版本,新版本中对接口进行了更改或者移除等操作,就可能导致程序在运行过程中调用相关功能时出现兼容性错误,如崩溃、功能异常等情况。
注册问题:
部分 DLL 文件需要在系统中进行注册才能被正确使用,仅仅将其拷贝到可执行程序同目录下是不行的。例如一些基于 COM(组件对象模型)的 DLL,需要通过系统命令(如 regsvr32 命令在 Windows 系统中进行注册),只有注册成功后,程序调用时才能与之正常交互,否则即使文件在同目录下,也无法正常运行。

最后还有一个注意点:
程序依赖直接放在程序同目录,不要在程序目录新建文件夹,然后把依赖全部拷贝进去,确实是整洁了,但是程序默认不会主动去子文件夹查找,而是在同目录平级层面去搜寻。


两个后续

使用相对路径代码修改:在程序代码中,可以通过一些函数(比如在 C/C++ 里可以使用 SetDllDirectory 函数等)来指定额外的搜索路径,比如指定为同目录下放置依赖库的那个文件夹的相对路径,使得程序运行时能主动去该文件夹查找依赖库。

可执行文件所在目录:和 Windows 类似,默认会先在自身所在目录查找依赖的动态库(.so 文件等),不过 Linux 系统下有些发行版出于安全等考虑,可能会限制直接从可执行文件所在目录查找(通过设置相应的配置选项来改变这种限制情况)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值