小编Yog*_*rma的帖子

如何从git grep搜索中排除某些目录/文件

有没有办法搜索git存储库,git grep但从搜索中排除某些路径/目录/文件?像--exclude普通grep命令中的选项一样.

如果你很好奇:我不想使用普通的grep,因为它比git grepgit存储库的大小要慢得多.

git grep

121
推荐指数
4
解决办法
3万
查看次数

如何一次将gdb调试限制为一个线程

我想通过控制哪些线程执行时调试多线程程序.我正在使用C++和gdb.除主线程之外我有两个线程(对于示例程序),我想调试一个线程,同时保持另一个线程停止.

这是我写的示例程序:

#include <iostream>
#include <pthread.h>
#include <stdlib.h>

#define NUM_THREADS 2

using namespace std;

void * run (void *) {
  for (int i = 0; i < 3; ++i) {
    sleep(1);
    cout << i << " " << pthread_self() << endl;
  }
  pthread_exit(NULL);
}

int main (int argc, char** argv) {
  cout << "Start..." << endl;
  int rc;

  pthread_t threads[NUM_THREADS];
  for (int i = 0; i < NUM_THREADS; ++i) {
    rc = pthread_create(&threads[i], NULL, run, NULL);
    if (rc) {
      cout …
Run Code Online (Sandbox Code Playgroud)

gdb pthreads

21
推荐指数
2
解决办法
2万
查看次数

如何使用unique_ptr将const指针传递给const对象

我想传递一个unique_ptr辅助函数,我想确保辅助函数既不修改指针也不修改指针对象.如果没有unique_ptr,解决方案就是拥有

void takePtr(AClass const * const aPtr) {
  // Do something with *aPtr. 
  // We cannot change aPtr, not *aPtr. 
}
Run Code Online (Sandbox Code Playgroud)

(从技术上讲,这AClass const * aPtr已经足够了.)我可以这样说

AClass * aPtr2 = new AClass(3);
takePtr(aPtr2);
Run Code Online (Sandbox Code Playgroud)

我想反而使用unique_ptr,但无法弄清楚如何写这个.我试过了

void takeUniquePtr(unique_ptr<AClass const> const & aPtr) {
  // Access *aPtr, but should not be able to change aPtr, or *aPtr. 
}
Run Code Online (Sandbox Code Playgroud)

当我打电话给这个时

unique_ptr<AClass> aPtr(new AClass(3));
takeUniquePtr(aPtr);
Run Code Online (Sandbox Code Playgroud)

它没有编译.我看到的错误是

testcpp/hello_world.cpp:141:21: error: invalid user-defined conversion from ‘std::unique_ptr<AClass>’ to ‘const std::unique_ptr<const AClass>&’ [-fpermissive] …
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr c++11

20
推荐指数
1
解决办法
2万
查看次数

如果条件,shared_ptr如何工作

在C++中,我可以编写如下内容:

shared_ptr<A> a_sp = someFunctionReturningSharedPtr();
if (a_sp) {
    cout << a_sp->someData << endl;
} else {
    cout << "Shared Pointer is NULL << endl;
} 
Run Code Online (Sandbox Code Playgroud)

为什么if (a_sp)检查工作正常?a_sp不是布尔值,但如何检查true或false?if条件如何知道检查a_sp.get()函数的结果?或者,如果没有,是怎么NULL了的,两者均a_sp检查?是否有shared_ptr定义的函数将其转换为布尔值?

c++ shared-ptr

10
推荐指数
1
解决办法
6404
查看次数

如何在bash脚本中获得"之前执行的命令"?

我使用多个bash会话,我想在一个文件中跟踪所有这些历史记录(我不关心它是从多个会话多路复用,我总是可以在它前面放置一个会话标识符.)我有试着做

shopt -s histappend
Run Code Online (Sandbox Code Playgroud)

并且还添加

history -a 
Run Code Online (Sandbox Code Playgroud)

$PROMPT_COMMAND变量.但是它们都没有真正适合我,我不明白为什么它们不起作用(就我所知,它们表现得非常不确定......有时它们会从多个会话中复用命令,有时它们不会).

这个问题的目标是探索另一种方法来保持所有会话的历史记录,在那里我可以控制我写入历史记录的内容.我们的想法是将"previous command"存储在shell变量中,然后将该变量回显到变量定义中的history-log文件中PS1.

问题是:如何在shell变量中获得"先前执行的命令".我知道我可以echo !! >> logfile.txt在交互式bash会话中执行以将其记录到日志文件中.但是我如何在脚本文件(或.bashrc文件)中执行此操作?

我试过了

PROMPT_COMMAND="PC=$_;"
PREVIOUS_COMMAND=$(echo $PC)  # $_ only gives the last argument of previous command
export PS1="[\u@\h \w] [$PREVIOUS_COMMAND $(echo $_) $_] $ "
Run Code Online (Sandbox Code Playgroud)

但这一切都不起作用.

谢谢你的时间,〜瑜伽士

bash

9
推荐指数
1
解决办法
6587
查看次数

bash:如何拦截每个命令

有没有办法拦截给出的每一个命令bash?我可以拦截一个特定的命令,例如,cd通过定义一个函数cd(),我也可以为其他命令一次执行一个命令.但是我可以编写一个在执行每个命令之前调用的函数吗?我想做一些命令簿记,然后执行命令.

MichałŠrajer的想法PS4='$(echo $(date) $(history 1) >> /tmp/trace.txt) TRACE: '看起来很有希望,但这是我得到的输出:

$ ping www.google.com
 TRACE: ping www.google.com
PING www.l.google.com (74.125.224.52) 56(84) bytes of data.
64 bytes from 74.125.224.52: icmp_seq=1 ttl=56 time=3.77 ms
64 bytes from 74.125.224.52: icmp_seq=2 ttl=56 time=2.33 ms
^C
--- www.l.google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 2.334/3.054/3.774/0.720 ms
  TRACE: echo -ne '\033]0;myhost.com /home/yogeshwer/github/myproject\007'
  TRACE: grep -e '\* '
  TRACE: git branch …
Run Code Online (Sandbox Code Playgroud)

bash

8
推荐指数
3
解决办法
3434
查看次数

如何通过右值参考返回工作?

就在我认为我理解rvalue引用的时候,我遇到了这个问题.代码可能不必要地长,但这个想法很简单.有一个main()函数和returnRValueRef()函数.

#include <iostream>

#define NV(x) "[" << #x << "=" << (x) << "]"
#define log(x) cout << __FILE__ << ":" << __LINE__ << " " << x << endl

using namespace std;

class AClass {
 public:
  int a_;

  AClass() : a_(0) {
    log("inside default constructor");
  }
  AClass(int aa) : a_(aa) {
    log("inside constructor");
  }
  int getInt() const {
    return a_;
  }
  void setInt(int a) {
    a_ = a;
  }

  AClass(AClass const & other) : a_(other.a_) {
    log("inside copy constructor"); …
Run Code Online (Sandbox Code Playgroud)

rvalue-reference c++11

7
推荐指数
1
解决办法
903
查看次数

如何找到当前分支跟踪的分支

我试图弄清楚如果我git fetch在当前分支中将获取什么分支,我如何更改(通过某些变体git remote或编辑.git/config文件).

从哪个远程分支git pull获取内容?git fetch提取内容是否相同?有没有git命令可以显示所有这些信息?

git

6
推荐指数
1
解决办法
1953
查看次数

将git提交分成几个提交

我在一段代码中修复了两个错误,它修改了常见文件.例如,错误修复1修改了文件A,B,C和错误修复2修改了B,C和D.我在一次提交中有所有更改.出于代码审查的目的,我需要将更改拆分为两个提交(实际上是两个分支).

我在想的是,从我现在的分支fix,我创建了两个分支,如git branch fix-1 fixgit branch fix-2 fix.两个分支都有所有变化.现在,在分支中fix-1,我想保留与修复1相关的更改,即文件A中的所有更改,以及文件B和C中的更改部分.是否可以在git中执行此操作?什么命令与此相关?

我知道git add,我可以进行交互式添加,我可以选择要添加的代码,而不仅仅是文件级别.我可以在这里做类似的事吗?

git

4
推荐指数
1
解决办法
1957
查看次数

Mac OS X和BSD上的'git grep'和单词边界

我运行git grep "\<blah\>"规律我的Linux开发服务器上,但我刚发现我不能够使用\<,并\>在Mac(Mac OS X的10.6.8)(无法使用它=没有找到任何东西)。Mac中的正则表达式语法是否不同?

我尝试使用git grep -E "\<blah\>"但无济于事!:-(

regex git macos grep bsd

4
推荐指数
3
解决办法
1545
查看次数

从vim中的'iskeyword'中删除一个字符

在我的vimrc中,我已经包含了一个脚本(例如,otherscript.vim,我需要包括出于工作原因),它说:

autocmd FileType php setlocal iskeyword+=$
Run Code Online (Sandbox Code Playgroud)

我不想要这种行为.所以,稍后在vimrc中,我说:

autocmd FileType php setlocal iskeyword-=$
Run Code Online (Sandbox Code Playgroud)

(我也尝试使用set而不是setlocal.)但是,当我打开一个php文件时,iskeyword仍然包含$符号.我正在使用vim 7.2.':verbose set iskeyword'的输出是

iskeyword=@,48-57,_,192-255,$
    Last set from /path/to/otherscript.vim
Run Code Online (Sandbox Code Playgroud)

':scriptnames'的输出是:

...
7: /usr/share/vim/vim72/ftplugin.vim
8: /home/yogeshwer/.vimrc
...
74: /path/to/otherscript.vim
... 
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我如何将其他脚本所做的更改恢复为'iskeyword'吗?谢谢一堆.

vim

3
推荐指数
1
解决办法
1606
查看次数

C++(或任何其他语言)的优雅控制流程

我正在编写一个具有许多返回点的函数(取决于条件是什么),它new在不同的点上做了很多.在每个返回点,delete我需要做的一组是不同的.即便如此,我也不想在不同的地方做这些.处理这个问题的好方法是什么?

一些细节:让我们考虑一个功能:

int MainClass::testFunction() {
  numThreads++;
  char *a = new char[100];
  // Some computation with a
  if (condition1) {
    numThreads--;
    return -1;
  } 
  char *b = new char[100];
  // Some computation with b
  if (condition2) {
    numThreads--;
    return 42;
  } 
  // Some more stuff. 
  numThreads--;
}
Run Code Online (Sandbox Code Playgroud)

现在,之前return -1,我需要做的delete a而在此之前return 42,我需要做的delete a; delete b;.如果我有多个返回点,你可以想象这会变得多么复杂.

这是我的解决方案:

第一种解决方案:将所有删除放在函数末尾,放置一些标签,将返回值存储在返回点,然后使用goto(是的,那个脏字!)跳转到适当的删除并在执行删除后返回.

在上面的例子中,我可以说

superset:
  delete b;
subset:
  delete a;
numThreads--;
Run Code Online (Sandbox Code Playgroud)

并放在goto superset …

c++

2
推荐指数
1
解决办法
186
查看次数

标签 统计

git ×4

c++ ×3

bash ×2

c++11 ×2

grep ×2

bsd ×1

gdb ×1

macos ×1

pthreads ×1

regex ×1

rvalue-reference ×1

shared-ptr ×1

unique-ptr ×1

vim ×1