美文网首页
混合使用 Visual Studio 和 Mingw64 的一次

混合使用 Visual Studio 和 Mingw64 的一次

作者: 赵海洋 | 来源:发表于2023-11-07 13:56 被阅读0次

    某项目中使用Visual Studio开发了界面和逻辑,而底层代码由于是以linux为主的项目,所以使用mingw64编译为dll。
    测试时有种情况经常会导致崩溃,远程调试起来也比较繁琐,dll部分需要使用GDBServer+VSCode远程调试,界面逻辑可以使用Visual Studio + VS中的Remote Debugger远程调试。

    调试中发现进入dll内部的一个函数时在函数的第一行就崩溃了,断点断在函数的花括号那里,当时查看函数前后逻辑应该都是正常的,变量和寄存器的值也都是正常的。同样流程的代码在使用mingw64编译的一个测试程序中正常使用。

    image.png

    于是编译exe和dll的Debug版本再使用vscode远程调试,然后在进入函数之前切换为汇编代码,发现程序崩溃在call 0x7ffba35d1970 <___chkstk_ms>中,再一搜索跟堆栈有关。

    使用PE工具查看 DLL 的PE头中 默认栈大小为2MB,而exe的PE头中显示默认栈大小为1MB。回头看那代码,第一行就是 char buffer[1024*1024];

    所以问题解决办法,二选一:

    1. DLL代码中使用堆内存。
    2. Exe编译选项中默认栈大小改为与Mingw统一的2MB。

    相关文章

      网友评论

          本文标题:混合使用 Visual Studio 和 Mingw64 的一次

          本文链接:https://www.haomeiwen.com/subject/evkfwdtx.html