Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

exec_file crash on Debug mode (Win 10)

未關閉
#383 1 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
4/5
預估耗時
3-5 天
新手友好度
35/100
Issue 類型
缺陷
描述清晰度
基本清楚
活躍度
停滯
技術堆疊
cpp, python
領域
backend

研究方向

未指定任何儲存庫檔案或測試。先在所述的 Windows 10、VS2019、VC142、Python 3.10 偵錯環境中重現當機,然後比較使用 PyRun_File 的失敗 exec_file 路徑與正常運作的 PyRun_SimpleFile 和 _Py_fopen_obj 路徑。完成標準是在偵錯模式下執行 embedding.py,且不再出現回報的當機問題。

由索引模型根據 Issue 內容生成。

描述

I face a crash on build 1.78 of boost python, on Windows 10, VS2019, VC142, Python 3.10 only on debug mode. Here is the script

#ifdef _DEBUG

#undef _DEBUG

#endif
#define PY_SSIZE_T_CLEAN
#include <Python.h>
int main(int argc, char* argv[])
{
	Py_Initialize();
	char* f = const_cast<char*>("E:\\Projects\\TestBoostPython\\embedding.py");
	PyObject* fo = Py_BuildValue("s", f);
	PyObject* fb = Py_None;
	PyUnicode_FSConverter(fo, &fb);
	char* f_as_uft = PyBytes_AsString(fb);
	FILE* fs = fopen(f_as_uft, "r+");
	Py_DECREF(fo);
	Py_DECREF(fb);
	PyObject* result = PyRun_File(fs,
		f,
		Py_file_input,
		nullptr, nullptr);
	fclose(fs);
	Py_FinalizeEx();
	return 0;
}

which is exactly the exec_file of boost python.

The call stack is

	ucrtbase.dll!_invoke_watson()	Unknown
 	ucrtbase.dll!_invalid_parameter()	Unknown
 	ucrtbase.dll!_invalid_parameter_noinfo()	Unknown
 	ucrtbase.dll!_read()	Unknown
 	ucrtbase.dll!common_refill_and_read_nolock<char>()	Unknown
 	ucrtbase.dll!fgetc()	Unknown
	python310.dll!check_bom(int(*)(tok_state *) get_char, void(*)(int, tok_state *) unget_char, int(*)(tok_state *, const char *) tok, tok_state *) Line 267	C
 	python310.dll!tok_underflow_file(tok_state * tok) Line 944	C
 	[Inline Frame] python310.dll!tok_nextc(tok_state *) Line 1042	C
 	python310.dll!tok_get(tok_state * tok, const char * * p_start, const char * * p_end) Line 1366	C
 	[Inline Frame] python310.dll!PyTokenizer_Get(tok_state * tok, const char * *) Line 2053	C
 	python310.dll!_PyPegen_fill_token(Parser * p) Line 745	C
 	[Inline Frame] python310.dll!_PyPegen_expect_token(Parser *) Line 900	C
 	[Inline Frame] python310.dll!_tmp_15_rule(Parser *) Line 22816	C
 	[Inline Frame] python310.dll!_PyPegen_lookahead(int) Line 891	C
 	python310.dll!compound_stmt_rule(Parser * p) Line 2145	C
 	[Inline Frame] python310.dll!statement_rule(Parser *) Line 1490	C
 	[Inline Frame] python310.dll!_loop1_11_rule(Parser *) Line 22574	C
 	[Inline Frame] python310.dll!statements_rule(Parser *) Line 1446	C
 	python310.dll!file_rule(Parser * p) Line 957	C
 	python310.dll!_PyPegen_parse(Parser * p) Line 34511	C
 	python310.dll!_PyPegen_run_parser(Parser * p) Line 1325	C
 	[Inline Frame] python310.dll!_PyPegen_run_parser_from_file_pointer(_iobuf *) Line 1423	C
 	python310.dll!_PyParser_ASTFromFile(_iobuf * fp, _object * filename_ob, const char * enc, int mode, const char * ps1, const char * ps2, PyCompilerFlags * flags, int * errcode, _arena * arena) Line 26	C
 	python310.dll!pyrun_file(_iobuf * fp, _object * filename, int start, _object * globals, _object * locals, int closeit, PyCompilerFlags * flags) Line 1199	C
 	python310.dll!PyRun_FileExFlags(_iobuf * fp, const char * filename, int start, _object * globals, _object * locals, int closeit, PyCompilerFlags * flags) Line 1230	C

However the following code runs smoothly on the same environment

#ifdef _DEBUG
#undef _DEBUG
#endif

#define PY_SSIZE_T_CLEAN
#include <Python.h>

int main(int argc, char* argv[])
{
	Py_Initialize();
	char* f = const_cast<char*>("E:\\Projects\\TestBoostPython\\embedding.py");
	PyObject* obj = Py_BuildValue("s", f);
	FILE* file = _Py_fopen_obj(obj, "r+");
	if (file != NULL) {
		PyRun_SimpleFile(file, f);
	}
	Py_Finalize();
}
主要語言
C++
星號
537
分支
223
平均合併
11 小時 22 分鐘
30 天內合併 PR
2

環境準備

我們還沒有檢查這個專案的環境設定檔。先看它的 README,通用步驟見我們的新手貢獻指南。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

boostorg/python 的其他 Issue

查看 boostorg/python 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。