调用第三方函数触发__debugbreak及栈溢出崩溃问题排查求助
调用第三方函数时偶发崩溃的排查求助
问题现象
调用第三方函数do_command时程序偶尔崩溃,Visual Studio提示:
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in myexecutable.exe
- 崩溃仅在调用该函数时出现,成功调用的次数无固定规律
- 已确认函数调用参数的类型、取值均无误,且该第三方函数在通用场景下运行正常
- Release模式下同样会偶发崩溃
崩溃触发时的具体异常信息:
Exception thrown at 0x00007FFF75528A27 (ntdll.dll) in myexecutable.exe: 0xC0000005: Access violation reading location 0x000000E54C390000.
已执行的排查操作
- 初步怀疑内存损坏或泄漏,但代码几乎仅使用现代C++特性,暂认为该类问题概率较低
- 开启SEH异常编译选项
/EHa,用__try/__except(EXCEPTION_CONTINUE_EXECUTION)包裹函数调用,但__except块未触发 - 启用内存泄漏检测后,输出窗口先显示大量
0xC0000025异常,随后出现0xC00000FD栈溢出异常,最终触发0xC0000005访问违例 - 调用处代码极简,无额外逻辑:
do_command(player, position, index, command_id, nullptr); // 参数类型:int32_t, int32_t, int32_t, CommandType__Enum, MethodInfo* - 在崩溃点附近调用
_CrtDumpMemoryLeaks()检测到泄漏,但判断泄漏来自第三方代码,对当前排查无帮助 - 小幅重构代码后崩溃频率降低,但未找到根本原因,疑似存在未定义行为
求助需求
请求分析可能的问题原因,并提供进一步的排查方法
内容的提问来源于stack exchange,提问作者BullyWiiPlaza
相关产品推荐
相关产品推荐

