小编zit*_*eis的帖子

什么导致调试会话中的Sigtrap

在我的c ++程序中,我正在使用一个"发送?"的库.我在调试它时使用某个操作的Sigtrap(使用gdb作为调试器).然后我可以选择是继续还是停止程序.如果我选择继续该程序按预期工作,但在捕获Sigtrap后设置自定义断点会导致调试器/程序崩溃.

所以这是我的问题:

  1. 什么导致这样的Sigtrap?它是一个可以删除的剩余代码行,还是由调试器"找到他不喜欢的东西"引起的?
  2. 一般来说,sigtrap是一件坏事,如果是这样,为什么程序在编译Release而不是Debug版本时运行完美?
  3. Sigtrap表示什么?

这是我昨天发布的问题的一般方法 Boost Filesystem:recursive_directory_iterator构造函数会导致SIGTRAPS和调试问题.
我认为我的问题远非具体,我不希望你解决我的问题,但帮助我(并希望其他人)了解背景.

非常感谢.

c++ debugging gdb

32
推荐指数
3
解决办法
5万
查看次数

暂停boost :: thread无限时间

我正在使用boost :: thread库(V1.44)来支持我的C++项目中的线程.

用户需要能够暂停执行一个测试循环,该测试循环在自己的线程中运行,无限时间,并且只要他愿意,就可以恢复它.

在Windows下我解决了这个问题

bool ContintueLoop(){
if(testLoopPaused){ //testLoopPaused can be set by the user via  GUI elements
  try{
      boost::this_thread::interruptible_wait( 2147483648 ); //that's very ugly,
      // somebody knows the right way to pause it for a unlimited time?
      return true;
     }
  catch( boost::thread_interrupted& e ){ //when the user selects resume the 
      // the thread is interrupted and continues from here
      testLoopPaused = false;
      return true;
     }
if( ... ) //test for other flags like endTestLoop etc.
  ....
}
Run Code Online (Sandbox Code Playgroud)

这没有任何问题,即使知道无限制中断的正确值也会很好.

我开始实现我的程序的linux版本,但我遇到了我得到编译器错误的问题 …

c++ multithreading boost boost-thread

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

使用c ++随机选择算法的良好实践

设置:
必须生成伪随机模式.有几种方法/或算法可用于创建不同的内容.所有算法都会生成一个字符列表(但可能是其他任何东西)......重要的是,它们都返回相同类型的值,并且需要相同类型的输入参数.

必须可以调用GetRandomPattern()方法,该方法每次调用时都会使用随机算法.

我的第一个方法是将每个算法放在它自己的函数中,并在每次调用GetRandompattern()时选择一个随机的算法.但我没有提出另一种选择它们的方式,而不是一个不切实际,丑陋且不灵活的转换案例陈述.

class PatternGenerator{
 public:
  list<char> GetRandomPattern();
 private:
  list<char>GeneratePatternA(foo bar);
  list<char>GeneratePatternB(foo bar);
  ........
  list<char>GeneratePatternX(foo bar);
}
Run Code Online (Sandbox Code Playgroud)

每次调用GetRandomPattern()方法时,选择随机GeneratePattern函数的方法是什么?

或者整个班级的设计应该不同?

非常感谢

c++ random design-patterns function-pointers

6
推荐指数
3
解决办法
449
查看次数

以有效的方式逐字节地比较数据(使用C++)

有没有比使用C++列表容器的比较运算符更有效地按字节比较数据的方法?

我要比较[大?10 kByte <size <500 kByte]按字节数量的数据,以验证外部存储设备的完整性.

因此,我按字节顺序读取文件并将值存储在无符号字符列表中.此列表的资源由shared_ptr处理,因此我可以在程序中传递它,而无需担心列表的大小

typedef boost::shared_ptr< list< unsigned char > > = contentPtr;
namespace boost::filesystem = fs;

contentPtr GetContent( fs::path filePath ){
 contentPtr actualContent (new list< unsigned char > );       
 // Read the file with a stream, put read values into actual content
return actualContent;
Run Code Online (Sandbox Code Playgroud)

这样做了两次,因为文件总是有两个副本.必须比较这两个文件的内容,如果发现不匹配则抛出异常

void CompareContent() throw( NotMatchingException() ){
 // this part is very fast, below 50ms
 contentPtr contentA = GetContent("/fileA");
 contentPtr contentB = GetContent("/fileB");
 // the next part takes about 2secs with …
Run Code Online (Sandbox Code Playgroud)

c++ comparison performance containers stl

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

使用c ++仅更新二进制文件的一部分

是否可以仅用c ++更新文件的一部分?

例:

旧文件答: "A''A''A''B''B''C''C''C"
新文件:"A''A''A" "X''X" "C" 'C''C'

因为真实的文件不像这些例子那么小,而且我确实知道究竟发生了什么变化(更改内容的偏移和writeLenght),能够打开文件,将流设置到正确的位置,编写信息并再次关闭文件....但这将导致一个如下所示的文件:

更新文件:'0''0''0''X''X''C''C''C'

这是我使用的代码:

void update file( list<unsigned char> content, int offset){

fs::basic_ofstream< char > fileStream( path , ios::out | ios::binary );    
list< unsigned char >::const_iterator contentIter = content.begin();
// begin write operation at the offset
advance( contentIter , offset);
fileStream.seekp( offset );
while( contentIter != content.end() ){
    unsigned char value = (char)*contentIter;
    fileStream.put( value );
    ++contentIter;          
}
fileStream.close();
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者每次更改时都要重写整个文件?

谢谢

c++ stream

5
推荐指数
2
解决办法
2390
查看次数

在Windows下设置Netbeans编译wxWidgets项目

我正在尝试设置我的 Netbeans IDE,以便它能够编译 wxWidgets 项目。

有一个非常相似的问题: Setup wxWidget in Netbeans 6.1 C++ On MS Windows? 但答案对我不起作用。而且提到的版本有点过时了。

我使用 mingw 包进行编译。在 mysys 中使用以下命令从控制台编译一个小型 hello World 应用程序没有问题:

$ g++ hello.cpp `wx-config --libs` `wx-config --cxxflags` -o hello.exe
Run Code Online (Sandbox Code Playgroud)

这是我在 Netbeans 中尝试的内容:
项目属性:

  • C++ 编译器 -> 其他选项:(wx-config cxxflags 用反引号括起来)
  • C++ 编译器 -> 包含目录:installation_Path/include
  • 链接器 -> 其他选项:(wx-config --libs 用反引号括起来)

当我尝试编译时 Netbeans 创建的命令行对我来说似乎是正确的

g++.exe `wx-config --cxxflags` -c -g -I/D/lib/wxWidgets/include -MMD -MP -MF build/Debug/MinGW-Windows/main.o.d -o build/Debug/MinGW-Windows/main.o main.cpp
Run Code Online (Sandbox Code Playgroud)

这编译没有错误

g++.exe `wx-config --cxxflags`  `wx-config --libs` -o dist/Debug/MinGW-Windows/wxwidgetstest build/Debug/MinGW-Windows/main.o -L/D/lib/wxWidgets/lib/gcc_lib …
Run Code Online (Sandbox Code Playgroud)

c++ wxwidgets netbeans

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