2018-11-27

备注: 然而, 2019年, 本人还是使用通过slickedit阅读代码, 主要是看中其快捷键自定义功能. 2021年: 现在使用 vscode+ccls

1. 优点

  • c++中支持以 namespace::method 的方式来搜索symbol. (vscode中仅在当前文件时, 才可alt+n navigate) (slickedit通过context tagging可以搜索到)
  • 支持重构, 比如重命名之类的, 不必到处替换.
  • 支持 your_filename.c:846:14 直接跳转到指定的行和列. 在编译出错后, 复制出错信息, 然后 ctrl+shift+n, 然后粘贴类似 your_path/your_filename.c:846:14 来打开文件. (vscode中是 ctrl+p goto to file)
  • 好用的 "Find Usages", 就是查看谁使用了这个函数, 并不是基于字符串搜索. 比如, 对leveldb/db/version_set.cc的Version::Get使用Find Usages, 会跳转到 Status DBImpl::Get()中的 s = current->Get(options, lkey, value, &stats);
  • 杂项:
    • shift 两次 (search everything), 搜索 wrap, 移动到第1项是 use soft wrap, 回车, 即可应用该选项.

2. 缺点

  • 注释中的内容, 比如类似 //your_func
    无法通过ctrl+鼠标, 但是 可以通过 查找符号 定位到.
  • 对网络挂载的代码 不友好. 若发生网络断开, 那么, 需要重新索引.
  • 30天 试用

3. troubleshooting

现象: ceph中 src/mon/Paxos.cc

void Paxos::dispatch(MonOpRequestRef op)
{
  assert(op->is_type_paxos());
  op->mark_paxos_event("dispatch");  

}  

op->mark_paxos_event 无法通过ctrl+鼠标来跳转.

src/mon/MonOpRequest.h中有 typedef MonOpRequest::Ref MonOpRequestRef;

src/mon/MonOpRequest.h中有 typedef ceph::shared_ptr Ref;

src/include/memory.h中有

namespace ceph {
  using std::shared_ptr;

}

原因:
paxos.cc 有 #include "Monitor.h"
monitor.h 中 #include "include/memory.h"
但编辑器中对 文件monitor.h 报找不到路径include/memory.h
memory.h的路径为ceph_v10.2.10/src/include/memory.h

处理:
往 顶层的自动生成的CMakeLists.txt中添加
include_directories(src)
然后, 重载 cmake 工程.

本文地址: https://awakening-fong.github.io/posts/tools/why_clion

转载请注明出处: https://awakening-fong.github.io


若无法评论, 请打开JavaScript, 并通过proxy.


blog comments powered by Disqus