海风的Linux开发环境介绍

来源:互联网 发布:企业办公网络设计方案 编辑:程序博客网 时间:2024/04/27 17:04

 

Title: `海风的Linux开发环境介绍

 

  tag: linux开发入门, 开发环境, samba, indent, SourceInsight, Winux

 

 

  文档发布声明: 任何人都可以针对本文档自由转贴,拷贝,引用,及修改后再发布,而无需过问我本人,只希望能够留下属于原作者的一些版权信息,请尊重原作者的劳动。

  `海风 = temp77 ,意思是出生于 77 年的临时变量,目前就职于 GDLC .

 

简单归纳地说:

  "Winux"式开发环境 -- 出于好的开发效率考虑,又何必拘泥于Win阵营还是Linux阵营呢?

  ( 补:由于个人偏爱C的开发,C++方面的一些设置请各位稍微自己变化、补充一下 )

 

  首先声明一下:撰写本文的时候,测试和实践都是在 Red Hat Linux Enterprise AS4 (Nahant Update 4) 下完成的,简称 RHEL4_U4 。

 

我的开发环境选择是: 

 gcc+make + (Linux+ssh+samba) + (Win32+putty+SourceInsight) [ + indent.exe ]

  简单解释一下上面所指的含义:

  ○ Linux下开发首先必须要有 gcc 和 make 实现编译、链接 ;

  ○ Linux下要提供远程连接的便利,推荐SSH方式(SSH数据传送量小、比VNC更专业,资源和带宽消耗也小得多);

  ○ samba打开Linux文件共享的大门,让从Win32下远程修改Linux文件系统下的源文件成为可能;

  ○ Win32下有非常方便和专业的源码编辑工具SourceInsight,简称为 SI,在熟练操作前提下可以大幅提升开发效率;

  ○ putty是Win32下(轻量级)连接Linux的SSH的实用工具,应用广泛还免费,值得推荐;

  ○ 上面还少提了一个net.exe,该命令可马上产生一个网络共享的网络磁盘(方便的很),但作为Win32的一个固定组件,故意省略了;

  ○ indent [是可选的]不强制使用(不过总有一些识货的人知道它的价值)。

 

  写本文的初衷是,看到一些同学,在阅读源码的时候使用 SourceInsight ,修改后又打包上传到服务器(解压)编译执行,调试过程中有一些小的改动,又调出 VI 来一点点地找,一点点地改。这样子下来效率似乎是不太好。

  有道是 "磨刀不误砍柴工",现提出从前一个公司继承过来的经验,即在Win32下使用高效率的编辑工具(SourceInsight)直接修改远程Linux上的源文件,配合SSH直接在远程Linux环境上执行编译和调试,这是一种实践证明非常高效的方法。

 

  这里面没有什么大道理,完全是实践的总结。希望能对想学好Linux,但摸不到石头过河的后来者一点点启发而以。不过当然,要达到目标方法有很多,并不拘泥于以下介绍。

 

● 为什么要这样做

   在Linux下开发,最好是编译完后马上能运行看到效果,和进行即时调试吧。gcc 是一个命令行(费解),加上 make 后会好一点点,但终归还是命令行呀!从前被 Visual Studio 集成开发环境娇宠惯的后来者们,一定会对这种改变无所适从,望而却步吧?

   SourceInsight编辑环境,为了一些不适应Linux下集成开发环境的人所设,以目前自己经验来看,还是比较值得推荐。可惜它只能运行在Win32下面。这个工具本身提供了极为丰富的代码编辑手段外,还提供了一个自定义的宏(相当于插件,下面安装indent的时候会提到),让开发者自己定义希望实现的代码编辑行为,并很好的把一些外部工具的功能集成到开发环境当中去(比如集成pcLint静态检测代码缺陷等),具备相当大的灵活性!可以夸张地说"只有你想不到,没有它做不到的"。 [注:上一句已注明是夸张手法,不要钻牛角尖了]

   其它的选择, Eclipse 编辑环境也不错(苦恼是天生运行较慢,可能源于使用Java开发,并且集中了太多累赘[希望"大一统"的代价啊])。 VC 吧行不行,当然也行!Samba 是沟通了 Linux 到 Windows 文件系统的桥梁,只要设置好它就可以无所不能,发挥你的想象力吧!

 

  路过的B君:不好意思打个岔,爱因斯坦也说过,想象力比知识更重要! 因为知识可以学,,,,,

    砰! 砰!嘭~~    [注:暴扁中...]

● SourceInsight的一些实用技巧

 显然,本文的主题关注的是开发效率(并非代码的执行效率)。有哪些以及如何用好SI的快捷键和实用功能是重点。不过鉴于 SI 的快捷键(功能)太多了,只能一点一点地累积,希望年月之功可以补偿(我)现在懒惰的原罪!

 ○ SourceInsight中我个人认为最重要功能是 "Shift+F8" ,能让你关注的单词高亮显示,不要小看了这个功能,它是我用SI的一个非常重要的理由之一。

 ○ 最常用的是搜索功能 "Ctrl+Shift+F" 可以调出全局搜索(整个工程),如果少按了个 Shift 键,不好意思,那就只搜你当前打开的文件了。

 ○ 还有一个比较常用的快捷键 "Ctrl+等号" ,这可以帮助你找到某个函数或者变量在工程中定义的位置(假如它在本工程中被define)。

 

 ○ SI v3.5 关于中文搜索的一个 BUG (致命)的预防。

  SourceInsight v3.5(.0042) 天生对中文支持不怎么友好,特别是下面一种情况必定导致它的异常退出!需要小心提防的。

  先体验一下,哈。随便在本文里面选中并拷贝一小段文字(含中文),打开 SI 工程后,按 "Ctrl+Shift+F" 键调出全局搜索功能,这时,SI自动把剪贴板里面的内容置于搜索栏里,不过由于解析中文失败,会导致整个程序的异常退出(不要怕,这不会产生什么不良副作用的)。

 

 -- 加装 indent.em 宏 --

  这样做会有什么好处? 呵呵,如果我告诉你这样做没有一点好处你还会把这个"笨"家伙装上吗? 建议你先略过本段,等以后想到这方面的需要的时候再回来找我!

  GNU组织出品的这个 indent 其实是用来美化代码的 (说的那么好听,其实是规范化代码风格的!!)。从前公司强制代码风格统一,每个月考编程规范(逼死人的90分才算及格!),稍不注意还被揪住小辫子算作代码缺陷率(抓辫子的是"狗屁"英雄!)。哈哈,要是早知道有这么好的东西用,就不必烦恼了(目前是我的SourceInsight最佳伴侣)。

  下面简要介绍如何安装法: 

  ① 首先安装 indent 的 Win32 版本。 下载文件请看 "http://www.gnu.org/software/indent/#downloading"

 

  ② 假设已经安装到这个目录下 "D:/Program Files/GnuWin32/bin/indent.exe"

 

     如下调用一下命令行就可以重新对源文件排版( %1 为源码文件名 ),且不备份原来文件:

     "D:/Program Files/GnuWin32/bin/indent.exe" --no-tabs -i3 -bl -nce -bls -bli0 --line-length120  -kr  %1 -o %1

 

     √ 注意,一、上面的执行文件路径根据实际情况修改; 二、本例子的风格是在 -kr 风格的基础上修改的(也就是 Kernighan & Ritchie style),他俩是C语言的创始人;

 

  ③  找到你的 SourceInsight 的 base project 的路径

      它一般会在你机器的 "我的文档" 目录下,如本例中的 "D:/Documents and Settings/Administrator/My Documents/Source Insight/Projects/Base"

 

  ④ 创建一个叫 indent.em 的 Source Insight 宏定义文件,内容如下: 

 

 

    macro indent()

    {

        execIndent = "D://Program Files//GnuWin32//bin//indent.exe";

        //sPara = " -kr ";  

        sPara = " --no-tabs -i3 -bl -nce -bls -bli0 --line-length120  -kr ";

 

        hbuf = GetCurrentBuf();

        sFile = GetBufName (hbuf);

        if (checkExtension(sFile))

        {

           SaveBuf(hbuf); // save Buffer first ,then open a cmd execute windows with minimized state [2] .

        //   msg("CmdLine = /"@execIndent@/" @sPara@ /"@sFile@/" ");

           exitcode = ShellExecute("open", "/"@execIndent@/"", "@sPara@ /"@sFile@/" -o /"@sFile@/" ", "", 2);

 

        // PS: Do not REMOVE the following statement that seem no use , or will cause "Reload Problem".

           exitcode = RunCmdLine("cmd /c echo /"Reflushing .../"; cmd /c exit",".",true);

 

           RunCmd("Reload File");

           RunCmd("Reload Modified Files");

           RunCmd("Parse File Now");

        }

    }

 

    macro CheckExtension(sFile)

    {

        nLength = strlen(sFile)

        while (nLength > 0)

        {

            if (sFile[nLength] == ".")

                break

            nLength = nLength - 1

        }

        ext = strmid(sFile, nLength+1, strlen(sFile))

        if (   ext == "c" 

            || ext == "cpp"

            || ext == "h"

            || ext == "hpp")

            return True

        else

            return False

    }

 

 

    √ 补充说明:这个文件需要定位到 indent.exe 的位置,请相应修改 indent.em 里面路径 [注:使用双斜线作目录分隔字符]。

 

  ⑤  创建了上面那个文件之后,打开你的 Source Insight ,使用打开 Project 选项,

     打开 SouceInsight 默认的 Base Project (千万不要删了这个工程,否则会产生莫名其妙的错误)。

     当然,之后的操作就是把 indent.em 那个文件加到 Base 工程之中,Rebuild Project 一下,上面所定义的宏就生效了。

 

  ⑥  现在已经可以使用那个宏了,不过,在此之前,最好先设置它到 Menu 项上,然后给他一个快捷键,好让我们用的方便。

    ○ 在 Source Insight 里面,下拉 Options 菜单项,点选 Menu Assignments... 

    ○ 在 Command 框 里输入 "Macro:indent" ,就可以选中你之前创建的 SI 宏了,把它 Insert 到 Work 那个子目录里(要自己在Menu下拉框里面选)。

    ○ 此时,在 Menu Contorl 下面你应该可以找到它了(indent),选中他,并点右下方倒数第二个 Button [Keys..] 的。

    ○ 现在只要给这个 Menu项 加上快捷键就行了,建议使用 'Ctrl+Alt+Shift+i' 。

    ○ 在打开一个源文件之后(记得备份),按下 "Ctrl+Alt+Shift+i" 的组合键看看?!

 

   不多罗嗦了,还看不明白的自己做一遍,多试试准行。提示一下:Source Insight 的 .em 宏文件里,可以用 msg() 来进行调试。

 

● Linux 方需要设置什么

 

  ○ gcc 和 make :这个没什么好说的,政治任务死命令,连这个都没有还玩啥呢?用键盘敲一下 gcc 和 make 看看有什么反应(如果没安装会有相关报错的!)。 不会弄这个?不要告诉我你是将要搞开发的。

 

  ○ 打开 ssh 监听: 这个简单,首先用 lsof 命令确认一下,SSH 需要占用 22 端口进行监听连接请求的! 具体命令为 "lsof -i:22" 。[提示:没有网络的话,可以在你的 WinXP 里安个 VMware Server 版,那就有网络支持了!然后再在虚拟机中安装 Linux ,在里面使用 lsof ,噢,跑题了... ]

     如果没有打开 SSH 端口(命令没有任何回显),那表明你的 SSH 服务没有启起来,视乎不同的Linux发行版本,都不一样,不过没关系,这应该都是很基本的配置。就请有缘人高抬贵手,上网搜一下解决方案。好了,略...

 

  ○ 配置好 samba : 重头戏来啦,前面说过,samba 是 Linux 和 Win32 文件系统之间的桥梁! 有了它,我们可以发挥天马行空的想象力,潇洒地做一回"假爱因斯坦"了。

     我认为我所使用的 samba 的版本是3.0 ,因为在我敲命令 "man samba" 的时候看到的。 [小技巧:想知道某个词(如XXX)会不会存在相应的帮助内容,可尝试 "man -k XXX" 来看看]

 

     ( 注:下面介绍只为简单起见,没提到安全方面的设置,只满足搭建编程环境的最低需要而已,各位千万不要在公司的公网服务器上试。否则打开一个安全大窟窿给人攻击,可不要说我事先没警告过 )

   ① 我使用 root 用户登陆服务器,现在要给 samba 也建一个新用户,smb用户名也是 root ,密码为 123456 ,新创建的 smb用户的信息将会(自动)存储到服务器的 "/etc/samba/smbpasswd" 下。

      执行命令:"smbpasswd -a root" 。输入两次密码完成操作后,请 cat "/etc/samba/smbpasswd" 再确认一下。  [要重新设置密码,请执行 "smbpasswd root" 即可]

 

   -- 大概各位兄弟都已经注意到,samba 的配置文件都是放在 /etc/samba 里面的,这里面有个叫作 smb.conf 的配置文件,接下来我们将重点介绍这个文件的组织,全路径是 "/etc/samba/smb.conf" 。

      打开这个文件粗略浏览,这个配置文件是按照标准的 ini 配置文件来组织的。 首先,它里面有个节(section) [global] ,里面保存了一些全局使用的数据;而其他的一些节里面,节名会对应了一个共享名,比方说我添加了一个节名[users],他就自动对应了一个 users 的共享目录了。那么这个节下面应该有些什么 key 和 value 呢(才算有效的共享目录配置),这就是下面我将要描述的。

      在继续下一步之前,我建议大家先备份当前的 smb.conf ,请执行 "cd /etc/samba; tar cvzf org_smb.conf.tar.gz smb.conf" 。 要恢复,那请执行命令行 "tar xvzf org_smb.conf.tar.gz"。

 

   ② 把 global 里面多余的项都屏蔽掉(该行最前面加#字符),只留低下面四行(没有的请自行加上去),完成后的样子应如下。

 

 

     [global]

        workgroup = TUX-NET                           #

        server string = redhat.EL,v4 Samba Server     # 随便填

        map to guest = Bad User                       # 如用guest方式登陆将免问密码

        guest account = root                          # 扩大guest用户的权限为root的权限

 

 

      √ 注:上面提到的 root 用户是指 smb用户列表里的那个root用户。

   ③ 下面将创建一个共享名为 users 的共享目录,映射了Linux文件系统下的 /home 目录相对应。

      请编辑 "/etc/samba/smb.conf" ,添加下面一节内容( 不同Key对应的详细说明请看注释)

 

 

   [users]

     comment = All users       # 请随意

     path = /home              # 指定要共享出来的目录路径

     read only = No            # 是否只读共享吗

     create mask = 0666        # 涉及到新建文件的,创建后对应权限码

     directory mask = 0765     # 类似上面,不过这次是指目录

     public = yes              # 共享目录名是隐藏还是公开的

 

 

      √ 这样,在打开 samba 服务后,在Window 里将预期看到有 //xx.xx.xx.ip/users 这样的共享目录了。

   ④ 修改好配置后,需要重新启动 samba 服务才能够使配置生效,请键入 "service  smb  restart" (注意观察提示输出),成功了吗?

      如果成功,那么随便用一个 Windows 远程访问该台 Linux 的共享目录看看。 在 IE 地址栏输入 "//xx.xx.xx.xx" ,是不是可以看到 users 这个共享目录了呢?

    -- 如果提示输入用户名和密码,用户请输入  local/root  ,然后对应密码,点确定。

      访问共享目录里就能够得到你想要摆弄的 Linux 里的文件了,是不是能感受到这方便所带来的喜悦呢?

 

   ⑤ 要么再极端一点吧,你甚至连密码都不想输入了,那么请你给 [users] 节多加一个 "guest ok = yes" 这样的 key 和 value ,完整的节内容请参考其下

 

     [users]

        comment = All users       # 请随意

        path = /home              # 指定要共享出来的目录路径

        read only = No            # 是否只读共享吗

        create mask = 0666        # 涉及到新建文件的,创建后对应权限码

        directory mask = 0765     # 类似上面,不过这次是指目录

        public = yes              # 共享目录名是隐藏还是公开的

        guest ok = yes            # 指定用 guest 方式来访问

 

 

 

    √ 同样的需要重新启动 samba 服务才能让配置生效,请尝试一下各种操作,能够在共享目录中新建,修改,复制,删除等等一系列活动,看看会怎么样?(不输密码是不是要更爽一点)

     ( 如果 Windows 提示同一个服务不能打开两次之类的提示,请注销你的 Windows 用户重新登入,然后再重试即可。)

     另外请注意,Section 名不要重复!!

  -- 时间关系,我这里就不把配置项都说的那么仔细了,上述key已足够用已。读者如果感兴趣,可以搜索一下网文 "鸟哥的私房菜",里面有较详细的描述。

 

● Windows 方需要设置什么

 

 ○ 关键点是映射网络磁盘的命令

    虽说是关键点,但无须多讲,一条命令搞掂。先找一个目前所没有使用的盘符,比如 S 盘。

    "D:/WINXP/system32/net.exe"  use  S:  //172.16.100.110/users  123456  /USER:local/root /PERSISTENT:NO

    如果没有出错提示的,请打开我的电脑,察看 S 盘这个盘符里面的内容。确认一下是否就是你 172.16.100.110 那台远程主机的 /home 目录里的内容?

 

 ○ 安装好 SourceInsight,然后作一些简单设置:

    字体大小和文字对齐方式,也就是选择一种可以上下行完美对齐的文体(默认文体是长短不一的美术字体)。

  -- 请点选 "Options" -> "preferences.." ,然后选中 "Syntax Decorations" TAB页里的 "Doc Types...",得到一个配置页。

     让坐上方的 Document Type: 里选中 "C Source File" 和在 Screen Fonts.: 里选中 "Courier New 9" 字体;

     右下方的 "Expand tabs" 和 "Show line numbers" 前方的方框里打上 √ , 最后点选 Close 即可。

 

    SourceInsight 的使用起步比较简单,这里就不一步一步赘述了,无非就是创建空的工程,然后添加所有源文件,最后 Rebuild 一下工程而已。请各位多试几遍。

    通常情况下 SourceInsight 会默认建有一个叫 Base 的工程,请不要随意删除或者人为改动它,否则后果请自负。

 

 ○ putty 的实用方法介绍

    putty 较为值得推荐,因为它轻量级(不需安装),命令行支持,界面友好,使用极其方便。

   从网上下载得到 putty.exe 以后,直接把它放到 Windows 系统目录下。这样,就随时随地可以使用 "Windows键+R" 来运行 putty 登陆到其他Linux服务器上了。

   登陆到刚才所说的那个服务器也是只需要一条命令:

     putty -pw 123456 root@172.16.100.110

   默认的 SSH 端口使用 22 ,如果这个端口被改变了,可以利用(大写的) -P 参数来重新指定。

   更完整的命令应该如下:

     putty -2 -ssh -P 2222 -pw 123456 root@172.16.100.110

   请读者自行摸索一下,其他我也不再多说了。

 

 ○ indent 的使用介绍正如上面所介绍的 indent.em 的安装,请参考上面的叙述。

    另外还有值得推荐的 Windows 下小软件是 BeyondCompare 。这是一个基于文本的比较工具,两个版本的同一个源文件究竟改动了哪里?一目了然,也是个不可或缺的好工具!

    还有 TortoiseCVS (或TortoiseSVN) 这个版本控制软件,一般上规模项目的开发者都认识它。

 

 ● HelloWorld 演示

   什么都从最简单的开始,HelloWorld 够经典了吧。

   从Win系统里登陆到服务器,创建 /home/src/HelloWorld 目录,在这个目录下 "touch main.c" 出来。

   调出你的 SourceInsight ,创建一个名为 "HelloWorld_OnS_172.16.100.110" 的工程,到添加源文件那一步,请到 "我的电脑->S:盘" 里面查找和添加上 main.c (这有点不大好,最好能直接指定工程的基目录为 "//172.16.100.110/users/src/HelloWorld" )

   完成文件的添加后确定,双击 main.c 进入编辑状态,输入以下内容:

 

 

  #include <stdio.h>

  #include <stdlib.h>

  #include <unistd.h>

  int main() {

     printf("Hello Linux World!/n");

     return(0);

  }

 

 

 

   √ 上面 include 里面提到了一个 unistd.h 的头文件,作为 Linux 程序最好包含它, unistd 是 Unix standard 的缩写(Linux属于UNIX Like的系统)

   在 SourceInsight 里面保存了之后(实际上是在Linux主机上保存了它),我们使用 putty 登陆到远程主机的 /home/src/HelloWorld 目录下,并执行 "gcc main.c" 来编译并生成可执行文件 a.out。

   执行 "./a.out" 可以看到如下输出就证明你对了。

 

 [root@rs2 tmp]# ./a.out

 Hello Linux World!

 [root@rs2 tmp]#

 

 

 

 

  ○ 恭喜您已经入门成功,如果你上面有安装 indent 的话,请再执行一下 indent 看看(注意先备份成main.c.bk )。好,再假如你安有 BeyondCompare 的话,你直接把 main.c 和 main.c.bk 进行文本比较看看!!

     作为一个新手,没有吃惊吗? BeyondCompare 可以帮助我们分析像Linux内核源码那样的复杂代码,究竟两个小版本之间究竟有哪里发生了微妙变化,这样的分析工具个人认为是非常有价值的。

● 给你download的内核源码建个工程

  ○ 一个建议,由于内核源码十分庞大,最好都放在本地磁盘上,否则samba的网络延时会让你受不了的。

  ○ 对内核源码的所有 include 头文件先单独建一个工程,然后再给内核源码建立另一个工程。两个工程相互配合使用来阅读源码,个人感觉会更方便。

  ○ 给内核某个模块建立工程(举例:IP_VS 工程),这是另外一个建议,看内核不向看一个几百行的小程序,最好从它当中的一个功能完整的小模块开始入手,我建议用集成到 2.6 内核里的 LVS 模块的源码作为入手,代码量也不大(更重要的LVS模块创始人是中国的,章文嵩博士)。

     头文件在内核源码(包)的 "省略../linux-2.6.20.3/include/net/ip_vs.h" 中,不要漏掉了。其余源文件均在 "省略../Kernel_src/linux-2.6.20.3/net/ipv4/ipvs" ,请用这些源文件构建一个工程。

 

  --- 一个苦恼是,Linux文件系统对文件名大小写是敏感的,但Win32系统却相反,导致在包含内核源码中某些文件的时候出错。

      举例说明: xt_CONNMARK.c  和 xt_connmark.c 在 Linux 里被认为是两个文件,但在 Win32 系统中却误以为是同一个文件。最好把 xt_connmark.c 改为 xt_connmark(1).c 以示区别。

      不过对于这样的环境组合所带来的便利来说,这点小节还是可以忍受的。

 

 

● 题外话

  使用虚拟机! 有什么好处?代价呢?

  哈,如果你有个习惯是从文章的最后开始看的,那么你就比较幸运了。这里提供了一个解决方案,可以让你的 Windows 里有 Linux ,Linux 里有 Windows ,总之让你无所不能,只要你还有想象力(和足够多的内存)。

  我的所有工作都是在一台机器上完成的,网络是虚拟的(所以Samba访问基本上没感觉到延时),不需要我机器要有真正的物理网卡,不用担心Linux 重编内核后起不来了,因为我可以重新拷贝一份磁盘镜像就可以重用了(当然需要事先备份咯)。所谓远程的 Linux 也在我本地硬盘上跑着,这都归功于 VMware 这款软件。唯一的代价是,我必须要有 512以上的内存和2G以上的CPU!

  VMware 有多个平台版本,我可以在 Windows 下创建虚拟机,也可以在 Linux 下创建虚拟机。尤其是在 Linux 下创建虚拟机(Linux运行效率较高),因为服务器的性能和资源都比较多,通常可以把一台服务器拆成N个Linux 远程主机来用,能解决了项目组内研发服务器紧缺的难题(每人独占一个远程主机)。

  关于 VMware 的使用说明网上很多,请自己搜集相关资料,我目前应用的版本是 VMware Server 1.0.1 build-29996 。

  以下是 VMware 的 Linux 下版本的下载路径 (RPM格式)

    "http://download3.vmware.com/software/vmserver/VMware-server-1.0.1-29996.i386.rpm" 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

我个人的macro格式

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老公发现老婆有外遇怎么办 睡眠不好半夜老是醒怎么办 拔完智齿肿了怎么办 拔牙后咽口水疼怎么办 吃了脏东西拉肚子怎么办 微信遇到仙人跳怎么办 牙有裂痕疼应该怎么办 胸罩在学校掉了怎么办 锁屏密码忘记了怎么办 中汇支付不到账怎么办 痘痘毁容烂脸怎么办 我的手机掉了怎么办 公司不给开工资怎么办 我有卵巢老化怎么办呢 老师骂了我,我该怎么办 我的牙齿很难看怎么办 门牙摔了个缺怎么办 鱼身上鱼鳞烂了怎么办 鱼身上发白烂了怎么办 养的鱼身上烂了怎么办 婴儿被蚊虫咬了怎么办 在野外被蚂蚁咬怎么办 娱乐之太帅了怎么办 鞋舌头歪没有孔怎么办 万一吃了母猪肉怎么办 我的手机丢了怎么办 欠了赌债还不起怎么办 车库门前被堵了怎么办 别人车停我车位怎么办 怎么办能防止锁眼被堵 别人堵着我车了怎么办 马桶被排骨堵了怎么办 马桶被刷子堵了怎么办 屎太大马桶堵了怎么办 大便硬马桶堵了怎么办 马桶让大便堵了怎么办 出了月子奶水少怎么办 木瓜没熟切开了怎么办 小孩被蚊虫叮咬红肿怎么办 下巴歪导致脸歪怎么办 全民k歌有杂音怎么办