我想写一个CMakeLists.txt,以便我可以正常运行我的测试或使用valgrind.我已经看到很多关于将ctest与valgrind集成,但所有这些都假设您要设置服务器以将测试结果提交到飞镖仪表板.我只想在我的机器上运行测试并在命令行上查看结果.
如果我必须做一个cmake -D VALGRIND = ON就好了,但如果可能的话,我宁愿生成名为"foo"和"valgrind_foo"的测试.
我想在C中编写C库的测试.我想模拟测试的一些函数.
假设我的库是从以下源编译的:
/* foo.h */
int myfunction(int x, int y);
/* foo.c */
#include "foo.h"
static int square(int x) { return x * x; }
int myfunction(int x, int y) {
return square(x) + square(y);
}
Run Code Online (Sandbox Code Playgroud)
我想写一个这样的测试:
/* foo_test.c */
#include "foo.h"
static int square(int x) { return x + 1; }
int main(void) {
assert(myfunction(0, 0) == 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以编译,只有在链接可执行文件时myfunction才会使用squarein 的定义foo_test.c而不是in 的定义?也就是说,我想编译成一个库(让我们调用它),然后用一些魔法进行编译,这样我就可以获得一个使用不同实现的可执行文件.foo.cfoo_testfoo.clibfoo.sofoo_test.clibfoo.sofoo_testsquare
听到 …
我在docker容器中有一个长时间运行的进程,我想附加gdb来查看正在运行的线程并获取stacktraces.我可以从主机附加到进程,但是我无法解析任何符号,因为可执行文件位于文件系统中的不同位置(它位于装载器的卷中)并且共享系统库全部停留在docker文件系统映像中在/ var/lib/docker中的某个地方.
我能够生成一个核心文件并使用gdb通过指定主机的可执行文件路径来查看它,但由于系统库都在错误的位置并且被加载到corefile中的错误位置,我得不到来自那里的信息.
我有任何我忽略的选择吗?
Xcode 4.2在首选项中有一个选项卡,用于处理本地网络中的共享编译任务.它使用bonjour和distcc将编译转储到选择了该选项的同一网络上的其他mac.升级到Xcode 4.3后我不再看到这个.它消失了吗?除了降级之外,有没有办法让它恢复?
我有以下基准:https://gist.github.com/leifwalsh/10010580
从本质上讲,它会旋转k线程,然后每个线程执行大约1600万次/ k锁定/增量/解锁周期,使用自旋锁和a std::mutex.在OSX上,std::mutex当争用时,它比自旋锁慢得多,而在Linux上它具有竞争力或者更快.
OSX:
spinlock 1: 334ms
spinlock 2: 3537ms
spinlock 3: 4815ms
spinlock 4: 5653ms
std::mutex 1: 813ms
std::mutex 2: 38464ms
std::mutex 3: 44254ms
std::mutex 4: 47418ms
Run Code Online (Sandbox Code Playgroud)
Linux的:
spinlock 1: 305ms
spinlock 2: 1590ms
spinlock 3: 1820ms
spinlock 4: 2300ms
std::mutex 1: 377ms
std::mutex 2: 1124ms
std::mutex 3: 1739ms
std::mutex 4: 2668ms
Run Code Online (Sandbox Code Playgroud)
处理器是不同的,但没有那么不同(OSX是Intel(R)Core(TM)i7-2677M CPU @ 1.80GHz,Linux是Intel(R)Core(TM)i5-2500K CPU @ 3.30GHz),这看起来像库或内核问题.有人知道缓慢的根源吗?
为了澄清我的问题,我理解"有不同的互斥实现可以针对不同的事情进行优化,这不是问题,而是预期的".这个问题是:实现中导致这种情况的实际差异是什么?或者,如果这是一个硬件问题(也许缓存在macbook上只是慢得多),那也是可以接受的.
假设我有以下内容:
trunk/
|-+ d1/
| |-- bar.c
| \-- foo.c
\-+ d2/
\-- baz.txt
Run Code Online (Sandbox Code Playgroud)
我愿意svn cp trunk branch,并且承诺。
现在,我在 中进行一些清理branch。
$ svn mkdir src
$ svn mv d1 src/
$ svn commit
$ edit src/d1/foo.c
$ svn commit
Run Code Online (Sandbox Code Playgroud)
这给我留下了以下内容branch
branch/
|-+ d2/
| \-- baz.txt
\-+ src/
\-+ d1/
|-- bar.c
\-- foo.c
Run Code Online (Sandbox Code Playgroud)
同时,trunk(编辑foo.c和bar.c)也发生了一些变化。
现在,从哲学上讲,我希望branch的目录结构能够反映在 中trunk,并且我也希望在那里对其文件进行的编辑。trunk但我也想要我工作时发生的编辑。trunk/d1/foo.c所以我想合并和的内容branch/src/d1/foo.c。
向任一方向(trunkto …