boost.coroutine2 cannot generate dump
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 25/100
- issue の種類
- バグ
- 明瞭さ
- 説明が足りない
- 活発さ
- 停滞
- 技術スタック
- cpp
調査の方向性
まず、提供された Windows の例を boost.coroutine2 の有無それぞれで再現し、CreateMiniDump、MyUnhandledExceptionFilter、CoroutineFunction に注目します。両方の場合の例外処理の動作を比較し、失敗する経路に関係する coroutine2 の実装を調査します。原因が特定され、テスト済みの修正または文書化された制限事項が提供されれば完了です。
索引モデルが issue の本文から書いたものです。
説明
windows, using boost.coroutine2, cannot generate dump (using mini dump) if a crash occurs in the coroutine function. As long as boost.coroutine2 is not used, the dump file can be generated. Is there something I'm missing?
Here is the code example:
#include <boost/coroutine2/all.hpp>
#include <Windows.h>
#include <dbghelp.h>
#include <iostream>
#pragma comment(lib, "Dbghelp.lib")
void CreateMiniDump(EXCEPTION_POINTERS* pep) {
HANDLE hFile = CreateFile(
"crashdump.dmp", // File name
GENERIC_WRITE, // Desired access
0, // Share mode
NULL, // Security attributes
CREATE_ALWAYS, // Creation disposition
FILE_ATTRIBUTE_NORMAL, // Flags and attributes
NULL // Template file
);
if (hFile != INVALID_HANDLE_VALUE) {
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pep;
mdei.ClientPointers = FALSE;
BOOL rv = MiniDumpWriteDump(
GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
MiniDumpNormal,
&mdei,
NULL,
NULL
);
if (rv == FALSE) {
std::cerr << "MiniDumpWriteDump failed: " << GetLastError() << std::endl;
}
CloseHandle(hFile);
}
}
// Exception filter to handle crashes
LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS* pExceptionPointers) {
CreateMiniDump(pExceptionPointers);
return EXCEPTION_EXECUTE_HANDLER;
}
#pragma optimize("", off)
void CoroutineFunction(boost::coroutines2::coroutine<void>::push_type& yield) {
// Example code that may crash
std::cout << "CoroutineFunction Begin\n";
int* p = nullptr;
*p = 0; // This will cause a crash
std::cout << "CoroutineFunction End\n";
}
#pragma optimize("", on)
int main() {
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
//
//int* p = nullptr;
//*p = 1000;
// Use Boost.Coroutine2
try {
boost::coroutines2::coroutine<void>::pull_type source(
[](boost::coroutines2::coroutine<void>::push_type& sink) {
CoroutineFunction(sink);
}
);
}
catch (const std::exception& e) {
std::cout << "Exception: " << e.what() << std::endl;
}
std::cout << "sssssssssssssssssssssssssssss\n";
char ch;
std::cin >> ch;
return 0;
}
- 主要言語
- C++
- スター
- 139
- フォーク
- 44
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
boostorg/coroutine2 のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 50/100
boostorg/coroutine2#54 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 20/100
boostorg/coroutine2#49 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
boostorg/coroutine2#37 ·
boostorg/coroutine2 の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
content good first issue
難易度 1/5 1時間未満 初心者へのやさしさ 95/100
cpinitiative/usaco-guide#6699 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
codepointerapp/codepointer#231 ·
-
enhancement source/qq
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
metasequoiaime/msime-windows#1054 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
amnezia-vpn/amnezia-client#3297 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信