有没有办法搜索git存储库,git grep但从搜索中排除某些路径/目录/文件?像--exclude普通grep命令中的选项一样.
如果你很好奇:我不想使用普通的grep,因为它比git grepgit存储库的大小要慢得多.
我想通过控制哪些线程执行时调试多线程程序.我正在使用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) 我想传递一个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++中,我可以编写如下内容:
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定义的函数将其转换为布尔值?
我使用多个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?我可以拦截一个特定的命令,例如,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) 就在我认为我理解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) 我试图弄清楚如果我git fetch在当前分支中将获取什么分支,我如何更改(通过某些变体git remote或编辑.git/config文件).
从哪个远程分支git pull获取内容?git fetch提取内容是否相同?有没有git命令可以显示所有这些信息?
我在一段代码中修复了两个错误,它修改了常见文件.例如,错误修复1修改了文件A,B,C和错误修复2修改了B,C和D.我在一次提交中有所有更改.出于代码审查的目的,我需要将更改拆分为两个提交(实际上是两个分支).
我在想的是,从我现在的分支fix,我创建了两个分支,如git branch fix-1 fix和git branch fix-2 fix.两个分支都有所有变化.现在,在分支中fix-1,我想保留与修复1相关的更改,即文件A中的所有更改,以及文件B和C中的更改部分.是否可以在git中执行此操作?什么命令与此相关?
我知道git add,我可以进行交互式添加,我可以选择要添加的代码,而不仅仅是文件级别.我可以在这里做类似的事吗?
我运行git grep "\<blah\>"规律我的Linux开发服务器上,但我刚发现我不能够使用\<,并\>在Mac(Mac OS X的10.6.8)(无法使用它=没有找到任何东西)。Mac中的正则表达式语法是否不同?
我尝试使用git grep -E "\<blah\>"但无济于事!:-(
在我的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'吗?谢谢一堆.
我正在编写一个具有许多返回点的函数(取决于条件是什么),它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 …