Notepad++工作编译环境设置 && GDB快速上手

Notepad++有很好的工作界面和环境,支持高亮、括号配对等等。是很好的Coding Environment啦。对于竞赛类单文件编程(而不是工程)是很好的工作环境。相比之下,devcpp太容易假死了。
我搞了一下,设置了一个Notepad++的工作编译环境。编译器为G++,调试器由命令行调用GDB。
首先,notepad++安装时会附带一个插件NppExec。我们打算用它来调用上述工具。。为什么用它呢?
第一,它是开源软件。^_^。 第二,他字体可调。不像cmd一样看久了太疲劳。总之白底黑字+15号Courier New的感觉肯定比cmd好。
当然有一点不足。。稍后讨论。。。
首先,做这些工作之前,请搞好你的cpp/pas编译器。包括但不限于安装。安装完成后,在cmd下测试,运行fpc/g++/gcc/gdb,如果均能找到,那很好。如果显示Bad filename or command. 要修改系统属性里面的用户变量。当然不修改也可以,那就把那些文件安装到%system32%下(囧),或者下面写脚本时时时记住带路径运行。反正设置好系统变量能少走弯路就是了。。。(怎么听起来像“路径压缩”?)
第二,确认你的Npp有NppExec。默认的几个安装包我试过都有。如果没有就自己到sf下载了。。。
先到插件-nppexec-“Follow $(CURRENT_DIRECTORY)”。使得运行程序的起始路径为当前编译文件所在目录。这个也不是必须的,但如果不设置下面有些操作很麻烦。为什么麻烦应该是显而易见的。
点击插件-NppExec-Execute。
这里可以敲进去脚本。。。先这个:
SET obj = $(CURRENT_DIRECTORY)\$(NAME_PART)
NPP_SAVE
g++ "$(FULL_CURRENT_PATH)" -o "$(obj).exe" -g
cmd /c pause
NPP_CONSOLE 0
点击下面的Save,保存为Compile。这段代码首先定义了一个变量叫obj,obj保存了当前文件(待编译文件)的路径除了最后拓展名和一个分割点的其余部分。
NPP_SAVE用于让Notepad++保存文件。这个不是必须的,只是这样更加符合IDE习惯吧。
下面的g++。如果你没有设置好用户路径,可能要另外开个变量: SET path = C:\DevCPP\bin\, 然后运行句改为$(path)\g++ ....什么的。大概是这样,没测试过。那个-g用于生成debug信息。如果你不调试只运行也可以不要。这里还可以加其他的选项。-o用于让g++生成指定名称的exe文件。如果是fpc就没有必要,大概是fpc "$(ojb).pas"之类就可以,fpc会自动生成同名exe。反正在cmd里测试完命令搬过来。最好加调试选项。
然后cmd/c pause用于编译完成后暂停。给你敲一次回车的快感。
最后一个用于隐藏NppExec的窗口。就这么简单。
保存完,点击execute。看到结果了吧。。。就不解释g++编译结果了吧。很简单的E文说明而已。
运行?
直接的:
SET obj = $(CURRENT_DIRECTORY)\$(NAME_PART)
$(obj).exe
cmd /c pause
NPP_CONSOLE 0
同样会定住窗口,给你一次按return的快感。
接下来搞定GDB调试。GDB调试很好很强大。虽然是命令行的稍微不是特别养眼但是功能很强又很稳定。自从用gdb还没被拖假死过。。。。很稳定很稳定。。。比devcpp稳定多了,比freepascal也稳定。虽然他们其实是做了接口调用gdb。
调试部分脚本:
SET obj = $(CURRENT_DIRECTORY)\$(NAME_PART)
gdb "$(obj).exe"
NPP_CONSOLE 0
gdb就会载入obj开始。
gdb的调试。。。好像很不容易精通的样子。。当然了,其实基本操作很简单,记住下面的命令:
start 开始运行到main(),并在main()第一个语句时暂停。
run 一直执行程序,直到遇到断点什么东西。(没有设置的话就会一直走)
continue 遇到breakpoint/watch时,被停住以后,可以继续运行。
print检视变量。如print a+b。可以带表达式。
display 相当于pascal/devcpp里的watch,会实时监视变量,在每次返回提示符时给出当前display值列表。显示效果和print一样。不支持pascal的set。
break 43在第43行设置断点。(break可以省做b)
b 43 if a==3 在第43行设置断点,条件为变量a==3. 这里表达式应当遵循你调试的语言的规范。对c支持最好。
until 执行当前循环体
advance 52 一直运行到第52行暂停。
step 单步执行,跟踪如子程序
next 单步执行,不进入子程序
quit 关闭
help 查看帮助,这个最有用了
list 显示源代码。好像没啥用,既然有npp在。
这些就足够了。。。
而且所有命令可以试着type前几个字母进去作缩写,如果成功就好了,不成功会给一个详细的prefix列表。
很好,现在什么都设置好了。。。可是还是很不爽。。没有shortcut?
Plugins-NppExec-Advanced Options里。左边看到menu item,可以把对应的script和菜单名称联系在一起。添加上compile、gdb什么的。然后nppexec的菜单里就有了这些命令。
然后重启Npp。在设置里面的快捷键中,在插件快捷键panel,找到nppexec下设置的菜单名,设置一个顺手的快捷键。。。
完成。
NppExec利用pipe实现那个输入输出。。好处嘛,当然是支持得广,利用系统原生支持unicode等等。但是。。。
在程序运行到死循环或者调试中暂停时,可能看不到程序的调试信息输出。。。GDB都是这样子,nppexec更加这样了。。。
然后,怎么办呢?
尽量在printf和fprintf前加fflush(stdout)把缓冲区写入。或者直接用cerr<<***<<endl之类的。
然后,在里面按ctrl+c会终止直接由nppexec运行的程序。。。但是它的子进程不被终止。。。
完毕。
|