VS调试F11进不到dll源码

10 篇文章 0 订阅
1 篇文章 0 订阅

  最近研究Amazon的aws-sdk-cpp,是开源的代码,至少要用VS2013进行编译,因为代码中用到了C++11的新语法。

  用cmake生成了VS2017的工程,编译顺利的通过了。然后写了个简单的测试工程,能正确的编译和运行,可是调试时发现F11始终进不到dll的源码,而在dll源码里打上断点后,F5运行却能在dll源码断点处停下来。印象中之前也有遇到过,一直没有找出原因。今天花了一上午的时间来研究,终于发现了问题。

#if defined (USE_WINDOWS_DLL_SEMANTICS) || defined (WIN32)
    #ifdef _MSC_VER
        #pragma warning(disable : 4251)
    #endif // _MSC_VER

    #ifdef USE_IMPORT_EXPORT
        #ifdef AWS_CORE_EXPORTS
            #define  AWS_CORE_API __declspec(dllexport)
        #else // AWS_CORE_EXPORTS
            #define  AWS_CORE_API __declspec(dllimport)
        #endif // AWS_CORE_EXPORTS
    #else // USE_IMPORT_EXPORT
        #define AWS_CORE_API
    #endif // USE_IMPORT_EXPORT
#else // defined (USE_WINDOWS_DLL_SEMANTICS) || defined (WIN32)
    #define AWS_CORE_API
#endif // defined (USE_WINDOWS_DLL_SEMANTICS) || defined (WIN32)
  以上是aws-sdk-cpp定义的导入导出宏定义,aws-sdk定义了USE_WINDOWS_DLL_SEMANTICS、WIN32、USE_IMPORT_EXPORT和AWS_CORE_EXPORTS,这样宏AWS_CORE_API就被定义为__declspec(dllexport),表示从dll中导出相关符号。

  而我写的测试工程,只定义了WIN32,最终宏AWS_CORE_API定义为空,在把aws-sdk头文件include后,相关函数的定义“AWS_CORE_API void InitAPI(const SDKOptions& options);”就变成了“void InitAPI(const SDKOptions& options);”,没有__declspec(dllimport),这样也能编译通过并且正确运行,但是F11就是进不到dll源码里面。以前的认知是要导入函数,必须加__declspec(dllimport),但是今天才发现,原来不用__declspec(dllimport)定义函数,也能成功。

  然后我就在测试工程里加上了USE_IMPORT_EXPORT,编译调试,再F11就能进入到dll源码了。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值