Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

boost.coroutine2 cannot generate dump

オープン
#53 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
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 を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

boostorg/coroutine2 のほかの issue

boostorg/coroutine2 の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。