我试图寻找到一个特定的字符串或任意大写体(例如所有提交foobar
,FooBar
,fooBar
在一个Git仓库)引入/删除.
基于这个SO答案(涵盖了不同的基本用例),我首先尝试使用git grep
git rev-list --all | xargs git grep -i foobar
Run Code Online (Sandbox Code Playgroud)
这非常糟糕,因为它只提供了关于字符串是否存在于提交中的信息,因此我最终得到了大量多余的提交.
然后我尝试了pickaxe
,这让我大部分都在那里,例如
git log --pickaxe-regex -S'foobar' --oneline
Run Code Online (Sandbox Code Playgroud)
这只是小写的foobar
.我尝试了-i
旗帜,但这似乎不适用于该--pickaxe-regex
选项.然后我使用这样的模式,这让我更进一步:
git log --pickaxe-regex -S'.oo.ar' --oneline
Run Code Online (Sandbox Code Playgroud)
有没有办法做--pickaxe-regex
不区分大小写的匹配?
我正在使用git v1.7.12.4.
我有一个STL对象的应用程序,用作插件编写器的C++接口的一部分.
我知道兼容性的最佳选择是使用C接口,但目前不可行.
我知道libstdc ++中从GCC 3.4到4.8的所有内容在ABI方面都是高度兼容的.
因此,例如,如果我使用GCC 4.1进行编译,并且插件供应商编写使用GCC 4.7编译的代码,那么禁止角落情况一切都将在具有与GCC 4.7或更高版本相对应的libstdc ++版本的平台上完成,前提是STL用法是只有.so的内部,以及外部的.so界面使用的是纯粹的C,但对我来说情况并非如此.
所以,我很好奇关于作为插件接口的一部分使用的STL类的情况.我可以安全地在未使用相同编译器版本编译的共享对象之间传递STL对象(例如4.1和4.8)吗?如果人们使用不同的编译器选项,是否有任何关于如何编译和解决模板的问题需要注意什么?
我怀疑它会有问题.然而,GCC人员有可能以某种方式完成这项工作.
对于这个问题,我只对pre-C++ 11编译和链接感兴趣.我也只对使用GCC的Linux和Mac OS X感兴趣.
我正在尝试编写一个GDB脚本(遗留,而不是Python),它将打印有关局部变量(C或C++结构)成员的信息,但前提是该局部变量存在.就像是:
# 'magic' should be evaluate to "if 'info locals' has a variable named foo, then
# evaluate to true, otherwise evaluate to false.
if (magic)
print foo->member
end
Run Code Online (Sandbox Code Playgroud)
我知道这有点人为,因为本地人依赖于堆栈框架(所以我可能最好不要让它以框架为条件),但我仍然想知道沿着这些线条是否有可能.
我有获得基于一个GDB的Python脚本的堆栈跟踪附带的Python 2.6源的传统GDB命令脚本(SO不允许超链接,但这里的网址:http://#%20http://svn.python.org/view/*checkout*/python/branches/release26-maint/Misc/
)
该脚本有一个 while 循环,它根据要退出的程序计数器进行相当脆弱的检查,这(如注释中的原始代码中所述)可能仅适用于直接运行 Python 的情况,而不适用于解释器是从 C/C++ 应用程序中启动。
现有的 while 循环如下所示:
while $pc < Py_Main || $pc > Py_GetArgcArgv
# ...
# code for extracting Python stack from local vars in relevant frames
# of C stack
# ...
up-silently 1
Run Code Online (Sandbox Code Playgroud)
对于我想要调试的程序,检查Py_Main
并Py_GetArgcArgv
不会很好地工作,所以我正在寻找一个循环条件,当它到达main
.
所以我一直在考虑使用程序计数器、帧指针和堆栈指针的想法,基于如果up-silently
失败,它们将具有与以前相同的值,这意味着我在顶部堆栈,像这样:
set $oldpc = -1
set $oldfp = -1
set $oldsp = -1
while !($oldpc == $pc && $oldfp == $fp && $oldsp == $sp)
# ... …
Run Code Online (Sandbox Code Playgroud) 我对Python比较陌生,并且想知道从a中删除元素时是否有任何理由更喜欢这些方法之一dict
?
A)使用 del
# d is a dict, k is a key
if k in d:
del k
Run Code Online (Sandbox Code Playgroud)
B)使用 pop
d.pop(k, None)
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是方法(A)需要做两次查找 - 一次在if
语句中,再一次在执行中del
,这会使它稍微慢一点pop
,只需要一次查找.然后一位同事指出del
可能还有优势,因为它是一个关键字,因此可能会更好地优化,而pop
最终用户可以替换这种方法(不确定这是否真的是一个因素,但他确实如此)有更多编写Python代码的经验).
我写了一些测试片段来比较性能.它看起来del
有优势(如果有人关心尝试或评论正确性,我已经附加了片段).
所以,这让我回到了这样一个问题:除了边际绩效收益之外,是否有理由偏好一个而不是另一个?
以下是测试性能的片段:
import timeit
print 'in: ', timeit.Timer(stmt='42 in d', setup='d = dict.fromkeys(range(100000))').timeit()
print 'pop: ', timeit.Timer(stmt='d.pop(42,None)', setup='d = dict.fromkeys(range(100000))').timeit()
print 'del: ', timeit.Timer(stmt='if 42 in d:\n del d[42]', setup='d = dict.fromkeys(range(100000))').timeit()
Run Code Online (Sandbox Code Playgroud)
这输出
in: 0.0521960258484
pop: 0.172810077667
del: 0.0660231113434 …
Run Code Online (Sandbox Code Playgroud)