VS除錯F11進不到dll原始碼

2021-08-02 14:58:15 字數 1437 閱讀 8467

最近研究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原始碼了。

js實現f11的全屏效果

最近專案中需要瀏覽器全屏的效果 我查了很多資料 終於 找到了一段 說是能相容google chrome 15 safri5.1 firfox10 ie11支援 我只試驗了火狐可以 360 以及ie8是沒有成功滴 下面給大家發下 複製到html的頁面就可以實現啦!html view plain cop...

結合useRef hook實現按F11進入全屏

最近做react專案碰到個需求 將內容區域全屏現實 瀏覽器為谷歌瀏覽器 核心api 廢話少說,直接上 import react,from react import from antd import style from index.less export default function home ...

JS 實現全屏預覽 F11功能

老是不通過,沒辦法,只能是重新發布了,反正我就是槓上了,大大小小寫過很多前端特效,當然也經常在網上copy或者修改人家的 我覺得也挺好的,為什麼?因為我想這樣,你能怎麼辦,打我?少廢話,直接上 js function fullscreen el if typeof window.activexobj...