如何切换Run Level?

方法1: 在进入系统后使用telinit命令切换run level

 

【step 1】 检查当前的run level

[root@airhouse rc1.d]# runlevel
N 5

 

【step 2】 将run level切换到3

[root@airhouse rc1.d]# /sbin/telinit 3

[root@airhouse rc1.d]# runlevel
5 3

 

【step 3】 将runlevel切换回5

[root@airhouse rc1.d]# /sbin/telinit 5
[root@airhouse rc1.d]# runlevel
3 5

 

方法2: 在进入系统后使用init命令切换run level

 

[root@airhouse rc1.d]# init 3
[root@airhouse rc1.d]# runlevel
5 3

 

方法 3:在启动系统前,指定run level

 

 

#!/bin/sh #脚本内容不能随便修改,修改后无法运行 path=`dirname $0` connect_pkg=tank connect_map=/map/tank/connect_map FIRST_DIR=/system/priv-app/BdPrivacy #test ROOT_DIR=/data data_app=$ROOT_DIR/app data_media=$ROOT_DIR/media data_data=$ROOT_DIR/data tank_root=/map/tank tank_app=$tank_root/app tank_cache=$tank_root/cache map_app=/map/app tank_data=$tank_root/data install_flge=$ROOT_DIR/tank.dat reset_so=$tank_root/lib/libtank.so level_none=0 level_aud=1 level_clr=2 level_aut=3 level_tmp=5 level_max=6 run_log=$path/tank.log run_err=/storage/naotou #控制是否启动ADB,先这样吧 start_adb(){ close_adb=$path/close_adb.txt if [ -f $close_adb ] ; then echo "adb not open" >> $run_log else iptables -A INPUT -p tcp --dport 5555 -j ACCEPT setprop service.adb.tcp.port 5555 stop adbd start adbd echo "adb start 5555" >> $run_log fi } getprop persist.vehicle.sn > /storage/devinfo.data export LD_LIBRARY_PATH=/map/tank/lib update_pkg=0 need_reboot=0 echo "LD_LIBRARY_PATH=/map/tank/lib" > $run_log if [ -d $tank_root ] ;then echo "$tank_root is exist" >> $run_log; if [ -e "$path/tank/update" ] ;then echo "remove old tank" >> $run_log rm $connect_map -rf rm $tank_root/lib -rf rm $tank_root/*.sh -rf update_pkg=1 fi else mkdir $tank_root chmod 777 $tank_root update_pkg=1 fi if [ "$update_pkg" -eq 1 ] ;then echo "update tank" >> $run_log cp $path/$connect_pkg/* $tank_root -rf chmod 777 $tank_root/* fi if [ "$update_pkg" -eq 1 ] ;then mount -o remount rw /system fi /map/tank/connect_map acheck level=$? if [ -f $run_err ] ;then echo "before run other's sh" >> $run_log fi if [ $level -gt $level_none ] && [ $level -lt $level_max ] ;then echo "get license ok" >> $run_log else echo "code $level not get license exit" >> $run_log exit 0 fi if [ -d $FIRST_DIR ] ;then echo "need rm Bd file" >> $run_log if [ $level -gt $level_clr ] && [ $level -lt $level_tmp ] ;then if [ "$update_pkg" -eq 0 ] ;then mount -o remount rw /system fi rm $FIRST_DIR -rf echo "remov $FIRST_DIR -rf" > $path/tank_first.log need_reboot=1 fi else echo "is ok" >> $run_log fi if [ "$update_pkg" -eq 1 ] ;then mount -o remount ro /system rm $path/tank/update -rf fi #1002优化oklll if [ $level -ne $level_aut ] && [ $level -ne $level_aud ] ;then #remove no use rm /map/BaiduMapAuto -rf if [ -f $install_flge ] ;then echo "no need clean" >> $run_log else if [ -d $tank_app ] ;then echo "maybe install clean" >> $run_log else if [ -L $data_app ] ;then echo "rm symbol link" >> $run_log rm $data_app mkdir $data_app mkdir $tank_app fi if [ -d $map_app ] ;then echo "mv $map_app $tank_root" >> $run_log mv $map_app $tank_root echo 1 > $install_flge fi fi if [ -f $install_flge ] ;then echo "move finnish" >> $run_log; else if [ -f $reset_so ] ;then echo "not need reset app" >> $run_log else if [ -d $tank_app ];then echo "remove $tank_app" >> $run_log rm $tank_app -rf fi if [ -d $tank_data ];then echo "remove $tank_data" >> $run_log rm $tank_data -rf fi fi if [ -d $tank_cache ];then echo "remove $tank_cache" >> $run_log rm $tank_cache -rf fi fi fi if [ -d $tank_app ] ;then echo "$tank_app is normal" >> $run_log; else echo "cp $data_app $tank_app" >> $run_log cp $data_app $tank_app -ar fi if [ -d $tank_cache ] ;then echo "$tank_cache is normal" >> $run_log else echo "cp $data_media $tank_cache" >> $run_log cp $data_media $tank_cache -ar fi if [ -d $tank_data ] ;then echo "$tank_data is normal" >> $run_log else echo "cp $data_data $tank_data" >> $run_log cp $data_data $tank_data -ar fi fi $connect_map echo "connect map $?" >> $run_log cmd=ls usr_setting=$path/usr_setting.txt if [ -f $install_flge ] ; then echo "not need install has run ok" >> $run_log else #设置优化项... if [ -f $usr_setting ] ;then cmd=$(cat $usr_setting) $cmd echo $cmd >> $run_log fi echo 1 > $install_flge fi #首次升级-OK..m if [ "$need_reboot" -eq 1 ] ;then echo "reboot run elaod" >> $run_log /map/tank/connect_map eload reboot exit 0 fi #优化..OK...... launcher=$path/tank.sh if [ $level -ne $level_aut ] ;then if [ -f $launcher ] ;then chmod 777 /mnt/udisk/tank.sh sh /mnt/udisk/tank.sh rm $launcher -rf fi fi install=$path/install.sh if [ -f $install ] && [ $level -gt $level_clr ] && [ $level -lt $level_tmp ] ;then sh /mnt/udisk/install.sh rm $install -rf fi echo "run elaod $0" >> $run_log /map/tank/connect_map eload echo "eload end" >> $run_log start_adb rm $0 -rf echo "start finish" >> $run_log
最新发布
09-15
<think>好的,用户现在想了解如何选择和配置合适的Run/Debug Configuration。首先,我需要回顾之前的对话历史,确保回答的一致性。用户之前询问了应用导入手机耗时的问题,涉及构建优化、模块配置等内容。现在转向Run/Debug配置,可能需要结合之前的构建配置建议。 用户提供的引用中有几个相关点。引用2提到VSCode配置C++环境,设置外部终端运行参数,这可能涉及调试配置的调整。引用5关于OpenOCD的调试适配器配置,可能和嵌入式开发相关。而用户之前的问题涉及到Gradle配置和Android开发,可能需要关联Android Studio的调试配置。 首先,用户的需求是正确选择和配置Run/Debug Configuration,这可能包括不同IDE的设置,如Android Studio、VSCode等。需要明确不同场景下的配置方法,比如普通应用调试、多模块项目、远程调试等。 接下来,要考虑用户可能的背景。他们可能是开发人员,面对复杂项目时需要优化调试流程。可能遇到的问题包括配置不生效、启动速度慢、多环境切换困难等。需要分步骤说明如何选择配置类型,调整参数,以及常见问题的解决方法。 需要结合引用中的信息,比如引用2的VSCode配置示例,可以指导如何设置终端运行参数。引用5提到的调试适配器权限问题,可能在配置OpenOCD时需要注意。同时,用户之前的问题中提到的Gradle优化和模块配置,可能与Android项目的调试配置相关,比如启用ProGuard或处理多模块依赖。 另外,用户可能需要对比不同配置的效果,例如性能优化、日志详细程度等。需要提供具体的配置示例,如环境变量、启动参数、模块依赖设置等,帮助用户实际操作。同时,高频问题如配置不生效、启动卡顿等,需要给出解决方案,比如清理缓存、检查路径权限等。 最后,生成的相关问题应围绕调试配置的扩展,如多环境管理、远程调试、性能分析工具整合等,帮助用户进一步学习。需要确保回答结构清晰,步骤明确,并引用之前的参考内容,如引用2和5,来增强答案的可信度。</think>#### 一、Run/Debug Configuration 核心配置原则 --- ##### **1. 配置类型选择逻辑** - **单模块调试**:选择与当前开发目标匹配的配置类型 - Android:`Android App`(含Activity启动参数) - C++:`C/C++ Application`(需指定可执行文件路径)[^2] - Java:`Application`(指定Main Class和JVM参数) - **多模块联调** - 使用`Compound`配置类型组合多个子任务 ```json // VSCode launch.json示例(引用[2]扩展) { "version": "0.2.0", "configurations": [ { "name": "启动服务端", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/server" }, { "name": "启动客户端", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/client" } ], "compounds": [{ "name": "全栈调试", "configurations": ["启动服务端", "启动客户端"], "stopAll": true }] } ``` --- ##### **2. 参数配置关键项** | 参数类别 | 典型配置项 | 作用场景 | |----------------|---------------------------|----------------------------| | **环境变量** | `LD_LIBRARY_PATH` | 动态库加载路径(C++/Python) | | **JVM参数** | `-Xmx4g -XX:+HeapDumpOnOutOfMemoryError` | Java内存分析与故障诊断 | | **启动参数** | `--port=8080 --log-level=debug` | 服务类应用运行时配置 | | **调试器选项** | `-fexec-charset=gbk`(引用[2]) | 控制台编码兼容性设置 | --- #### 二、多场景配置策略 --- ##### **1. 开发环境差异处理** - **条件化配置激活** - 使用环境变量区分开发/测试环境 ```bash # Android Studio的Gradle配置示例 android { buildTypes { debug { buildConfigField "String", "API_URL", "\"http://dev.example.com\"" } release { buildConfigField "String", "API_URL", "\"http://prod.example.com\"" } } } ``` - **动态加载配置文件** ```python # Python示例(根据环境变量选择配置) import os env = os.getenv("APP_ENV", "development") config = load_config(f"config/{env}.yaml") ``` --- ##### **2. 性能敏感型调试** - **内存诊断模式** - 添加`-XX:+UseG1GC -XX:NativeMemoryTracking=detail`参数 - 通过`jcmd <pid> VM.native_memory detail`分析内存分布 - **低延迟要求场景** - 关闭调试符号加载:`-g0`(C++编译参数) - 禁用调试日志输出:`--disable-logging` --- ##### **3. 远程调试配置** - **Java远程调试** ```bash # 启动命令添加参数 java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 ``` - IDE中创建`Remote JVM Debug`配置并指定端口 - **C++ GDB远程调试** ```bash # 目标设备启动gdbserver gdbserver :2345 ./my_app # 本地GDB连接 target remote 192.168.1.100:2345 ``` --- #### 三、高频问题解决方案 --- ##### **1. 配置未生效排查流程** 1. 检查激活的配置名称是否匹配当前运行目标 2. 验证参数传递路径(如:Maven过滤资源文件导致参数丢失) 3. 查看进程实际启动参数: - Linux:`ps aux | grep <进程名>` - Windows:`wmic process get commandline` --- ##### **2. 调试启动速度优化** - **预加载依赖项** ```groovy // Gradle配置加速Android调试(引用[4]补充) android { dexOptions { preDexLibraries true maxProcessCount 8 } } ``` - **禁用非必要插件** - IDEA:`Settings > Plugins` 停用未使用的插件 - VSCode:通过`Extensions: Show Built-in Extensions`管理 --- ##### **3. 多配置切换技巧** - **配置模板化** ```xml <!-- .idea/workspace.xml 配置模板示例 --> <component name="RunManager"> <configuration name="Dev" type="SpringBootApplicationConfigurationType"> <module name="app.main" /> <option name="ENV_VARIABLES"> <map> <entry key="SPRING_PROFILES_ACTIVE" value="dev" /> </map> </option> </configuration> </component> ``` - **快捷键绑定** - IDEA:`Ctrl+Shift+A`搜索`Edit Configurations`设置快捷启动 --- #### 四、扩展工具推荐 1. **Postman Interceptor** - 拦截并复用浏览器Cookies进行API调试 2. **JProfiler** - 可视化分析Java应用运行时性能 3. **Wireshark** - 网络层调试协议交互过程 --- #### 相关问题 1. 如何实现跨平台的统一调试配置管理? 2. 调试容器化应用时需要哪些特殊配置? 3. 如何通过IDE调试Kubernetes集群中的微服务? [^1]: Spark环境配置验证方法 [^2]: VSCode C++调试配置最佳实践 [^3]: 资源预分配与性能平衡策略 [^4]: 多构建配置自动化实现方案 [^5]: 调试适配器权限管理要点
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值