Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不允许google coredumper返回操作_C++ - Fatal编程技术网

C++ 不允许google coredumper返回操作

C++ 不允许google coredumper返回操作,c++,C++,背景:从code.google.com下载google-coredumper-1.2.1.tar.gz。生成代码并进行安装。为我的应用程序和执行添加了库和函数调用。无核心文件,不允许日志状态操作。因此,我创建了一个简单的示例,并对其进行了深入研究,发现库认为已在跟踪可执行文件。有什么想法吗 #include <string> #include <stdio.h> #include <stdlib.h> #include "crashtest.h" #inclu

背景:从code.google.com下载google-coredumper-1.2.1.tar.gz。生成代码并进行安装。为我的应用程序和执行添加了库和函数调用。无核心文件,不允许日志状态操作。因此,我创建了一个简单的示例,并对其进行了深入研究,发现库认为已在跟踪可执行文件。有什么想法吗

#include <string>
#include <stdio.h>
#include <stdlib.h>
#include "crashtest.h"
#include <google/coredumper.h>
#include <errno.h>
#include <string.h>
#include <signal.h>

FILE    * backtrace_file = NULL;

#define SIZE 100

void CREATE_COREDUMP()
{
  printf("NOTICE, Creating a core dump for debugging\n");
  char    extension[64];
  time_t  t       = time((time_t*)NULL);
  tm    * theTime = localtime(&t);

  snprintf( extension,
          sizeof(extension) - 1,
          "core.crashtest_02d_%02d_%02d_%02d", (theTime->tm_mday),
                                               (theTime->tm_hour),
                                               (theTime->tm_min) ,
                                               (theTime->tm_sec) );
  if (WriteCoreDump(extension) != 0) {
    std::string errmsg(extension);
    errmsg.append(" : ");
    errmsg.append(strerror(errno));
    printf("WARNING, Failed to create coredump: %s\n", errmsg.c_str() );
  }
}

static void mysighandler(int sig)
{
  printf("ERROR, Somebody Segmentation Faulted. About to Exit\n");

  CREATE_COREDUMP();
  exit(0);
}

crashtest::crashtest() {
  char * errcond = NULL;
  memcpy(errcond, "Crash This", 10);
}

crashtest::~crashtest() {}

int main(int argc, char** argv) {
  struct sigaction sa;

  sa.sa_flags = SA_SIGINFO;
  sigemptyset(&sa.sa_mask);
  sa.sa_handler = &mysighandler;

  sigaction(SIGSEGV, &sa, NULL);

  crashtest ct;
  return 0;
}
#包括
#包括
#包括
#包括“crashtest.h”
#包括
#包括
#包括
#包括
FILE*backtrace_FILE=NULL;
#定义大小100
void CREATE_COREDUMP()
{
printf(“注意,为调试创建核心转储\n”);
字符扩展[64];
time\u t=时间((time\u t*)空值);
tm*theTime=本地时间(&t);
snprintf(扩展,
sizeof(扩展)-1,
“core.crashtest_02d_u%02d_%02d_%02d”,(时间->tm\mday),
(时间->tm_小时),
(时间->tm_min),
(时间->tm_秒);
if(WriteCoreDump(扩展)!=0){
std::字符串errmsg(扩展名);
errmsg.append(“:”);
errmsg.append(strerror(errno));
printf(“警告,未能创建coredump:%s\n”,errmsg.c_str());
}
}
静态void mysighandler(int-sig)
{
printf(“错误,出现故障。即将退出\n”);
创建_COREDUMP();
出口(0);
}
crashtest::crashtest(){
char*errcond=NULL;
memcpy(errcond,“Crash This”,10);
}
crashtest::~crashtest(){}
int main(int argc,字符**argv){
struct-sigaction-sa;
sa.sa_flags=sa_SIGINFO;
sigemptyset(和sa.sa_面具);
sa.sa_handler=&mysighandler;
sigaction(SIGSEGV,&sa,NULL);
粗测ct;
返回0;
}
练习的要点是,主代码偶尔会生成一个分段错误,这是没有意义的,因为所有值都已初始化。因此,我试图发现为什么会出现分段错误,并希望获得一个核心来跟踪有问题的代码行。我不能只是杀戮,因为恢复和继续需要代码。这就是人们认为使用google coredumper的原因。

根据,coredumper在其当前状态下似乎不再可用:

我相信,如果我正确解释kernel.org上的数据,这 更改由Linus完成,并随2.6.15一起发货

perftools和coredumper都需要定位活动线程中的所有线程 为了工作而申请。由于libpthread已经发生了更改和 没有很好的文档化API来获取这些信息,正如我们的意图所示 为了支持所有内核版本和所有libc版本,我们求助于 ptracing任何被怀疑是中的线程之一的进程 以确定它是否真的是。这样做的另一个好处是 查找所有线程(包括未由libpthread管理的线程)和 暂时挂起它们,这样我们就有了一个稳定的内存映像 我们可以检查。将这两种工具都视为 轻量级进程内调试器

显然,我们必须特别小心,不要让我们自己的线程, 并避免任何可能导致死锁的库调用

在补丁之前,将ptrace附加到我自己的线程是一种有效的方法 活动有了这个新补丁,我再也做不到了

根据,coredumper在其当前状态下似乎不再可用:

我相信,如果我正确解释kernel.org上的数据,这 更改由Linus完成,并随2.6.15一起发货

perftools和coredumper都需要定位活动线程中的所有线程 为了工作而申请。由于libpthread已经发生了更改和 没有很好的文档化API来获取这些信息,正如我们的意图所示 为了支持所有内核版本和所有libc版本,我们求助于 ptracing任何被怀疑是中的线程之一的进程 以确定它是否真的是。这样做的另一个好处是 查找所有线程(包括未由libpthread管理的线程)和 暂时挂起它们,这样我们就有了一个稳定的内存映像 我们可以检查。将这两种工具都视为 轻量级进程内调试器

显然,我们必须特别小心,不要让我们自己的线程, 并避免任何可能导致死锁的库调用

在补丁之前,将ptrace附加到我自己的线程是一种有效的方法 活动有了这个新补丁,我再也做不到了


调试器确实跟踪程序,所以库的信念是正确的。恐怕这与“不允许操作”无关。检查
ulimit-c
的输出,如果为0,则将其设置为合理值。核心转储已启用。我在调试器标记的位置放了一条print语句,即使没有单步执行代码,也会打印出这一行。似乎有另一个对象跟踪线程。调试器确实跟踪程序,所以库的想法是正确的。恐怕这与“不允许操作”无关。检查
ulimit-c
的输出,如果为0,则将其设置为合理值。核心转储已启用。我在调试器标记的位置放了一条print语句,即使没有单步执行代码,也会打印出这一行。似乎有另一个对象在跟踪线程。