【发布时间】:2018-11-29 18:53:59
【问题描述】:
我正在尝试编写一个信号处理程序,当我的程序崩溃时每次都会调用它,然后将boost::stacktracer api 给我的信息写入我硬盘上的文件中。
编写处理程序没有问题,崩溃我的程序也没有问题。
但现在我完全不确定我 可以 在我的处理程序中使用哪些函数。
我将要使用的函数需要是异步安全的 我明白了,但我只是找不到窗口列表 允许 使用哪些函数 我得到了Linux 的列表非常清晰且易于理解但无用,因为大多数功能来自<unistd.h>,这在 Windows 中不存在,或者至少在 VS2017s 编译器中不存在。
因为我读到<io.h> 与<unistd.h> 非常相似,所以我尝试使用此标头中的功能来实现我的目标。
所以我使用_sopen_s(&fileHandle,"E:\\UslessStuff\\stacktracer.txt",_O_RDWR,_SH_DENYNO,_S_IWRITE);
打开一个文件
if(_write(fileHandle,&boost::stacktrace::stacktrace(),boost::stacktrace::stacktrace().size())==-1) {
switch(errno) {
case EBADF:
perror("Bad File Discription");
break;
case ENOSPC:
perror("No Space left on Device");
break;
case EINVAL:
perror("Invalid Parameter: Buffer was NULL");
break;
default:
perror("Unexpectet Error");
break;
}
}
写作。
所以我想不可以ok使用这个功能吗?
另外,我可以在信号中使用字符串多远?
如您所见,我尝试从boost::stacktrace::stacktrace() 获取信息,当我将它与cout << boost::stacktrace::stacktrace() 一起使用时,这给了我一个完美的结果,但是当我尝试像上面显示的那样编写它时,我只在我的文本文件中写入了2个RAM地址,所以我想我可以需要从boost::stacktrace::stacktrace()提取字符串并创建一个boost::stacktrace::frame fr,这将导致fr.source_file().c_str();,所以它会给我一个std::string,我可能需要将它打包在一个@ 987654334@ 听起来我真的不应该在信号中这样做
【问题讨论】:
标签: c++ visual-studio boost signals