小编Gas*_*ton的帖子

当只有一个时,gdb停止有太多观察点

除了太多硬件断点/观察点之外,您是否知道为什么无法插入观察点?

我有以下调试会话:

GNU gdb (GDB) 7.1
...
(gdb) watch itrap_t_beg[1][222]
Hardware watchpoint 1: itrap_t_beg[1][222]
(gdb) cont
Continuing.
...
Hardware watchpoint 1: itrap_t_beg[1][222]

...
(gdb) cont
Continuing.
Warning:
Could not insert hardware watchpoint 1.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.

(gdb) info break
Num     Type           Disp Enb Address            What
1       hw watchpoint  keep y                      itrap_t_beg[1][222]
        breakpoint already hit 1 time
Run Code Online (Sandbox Code Playgroud)

如您所见,只有一个观察点,但它无法插入断点.

你知道我怎么解决这个问题?

gdb

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

Linux和gcc 4中的C++ new运算符线程安全性

不久,我将开始使用共享内存开发并行版本的网格细化算法.

该大学的一位教授指出,我们必须非常小心线程安全,因为编译器和stl都不是线程感知的.

我搜索了这个问题,答案取决于编译器(有些尝试有点线程感知)和平台(如果编译器使用的系统调用是否是线程安全的).

那么,在linux中,gcc 4编译器为new运算符生成线程安全的代码?

如果没有,解决这个问题的最佳方法是什么?也许锁定每个呼叫到新的运营商?

c++ linux gcc thread-safety

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

Boost.Test测试静态库

我正在使用Boost.Test进行单元测试.

由于几个原因,我想在不同的静态库上编写单元测试用例.

问题是,当我这样做时,自动注册器不起作用.

例如,如果我有类似的东西:

// foo_tests.cpp
#define BOOST_TEST_MODULE "Foo"
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE( Bar )
{
    BOOST_CHECK( false );
}
// used to generate libFooTests.a

// main.cpp
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
// used to generate main.o
Run Code Online (Sandbox Code Playgroud)

然后,如果我将main.o与libFooTests.a链接并执行最终的二进制文件,它会说:

Test setup error: test tree is empty

如果我直接从源代码创建二进制文件,一切正常,但我不能使用自动注册在静态库中编写单元测试.

我能做到吗?

我需要定义一些宏吗?我需要从libFooTests.a导出一些符号?

谢谢!

c++ unit-testing static-libraries boost-test

11
推荐指数
1
解决办法
1956
查看次数