相关疑难解决方法(0)

我的程序崩溃时如何自动生成堆栈跟踪

我正在使用GCC编译器在Linux上工作.当我的C++程序崩溃时,我希望它能自动生成一个堆栈跟踪.

我的程序由许多不同的用户运行,它也可以在Linux,Windows和Macintosh上运行(所有版本都使用编译gcc).

我希望我的程序能够在崩溃时生成堆栈跟踪,并且在用户下次运行它时,它会询问他们是否可以将堆栈跟踪发送给我,以便我可以追踪问题.我可以处理向我发送信息,但我不知道如何生成跟踪字符串.有任何想法吗?

c++ crash gcc assert stack-trace

561
推荐指数
20
解决办法
33万
查看次数

线程安全的向量和字符串容器?

我发布了一个上一个问题"在嵌入式Linux平台上使用std :: string时出现Seg Fault",我得到了一些非常有用的建议.从那以后我就离开了其他项目,最近又回到了这个问题.

重申一下,我只能使用arm-linux交叉编译器(版本2.95.2),因为这是嵌入式平台供应商提供和支持的.我知道这个问题可能是因为stdlib非常老,而且特别是线程安全.

问题是每当我在多个线程中使用STL容器时,我最终会出现分段错误.除非我在容器声明周围使用pthread_mutex_lock和范围运算符(如在其他帖子中一样),否则下面的代码将始终是错误的.

在我的应用程序中使用这种方法是不可行的,因为我将容器传递给不同的方法和类.我理想地想解决这个问题,或者找一个合适的替代方案.我尝试过STLPort和SGI的标准模板库,结果相同.我只能假设因为它们是由非常古老的gcc链接的,所以它们无法解决问题.

有没有人有任何可能的建议或解决方案?或者你可以建议我可以放入我的代码中的vector(和string)的实现?

提前感谢任何指导.

#include <stdio.h>
  #include <vector>
  #include <list>
  #include <string>

  using namespace std;
    /////////////////////////////////////////////////////////////////////////////

    class TestSeg
    {
     static pthread_mutex_t     _logLock;
     public:
      TestSeg()
      {
      }

      ~TestSeg()
      {
      }

      static void* TestThread( void *arg )
      {
       int i = 0;
       while ( i++ < 10000 )
       {
        printf( "%d\n", i );
        WriteBad( "Function" );
       }
       pthread_exit( NULL );
      }

      static void WriteBad( const char* sFunction )
      {
       //pthread_mutex_lock( &_logLock );
       //{

       printf( "%s\n", …
Run Code Online (Sandbox Code Playgroud)

c++ linux arm stl segmentation-fault

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

标签 统计

c++ ×2

arm ×1

assert ×1

crash ×1

gcc ×1

linux ×1

segmentation-fault ×1

stack-trace ×1

stl ×1