目前我正在為一個專有軟體撰寫擴展。不幸的是,日志并不完全可用,因此正在進行中。擴展使用 Microsoft Visual Studio 2019 編譯為 DLL,此 DLL 依賴于 Tensorflow 2.6 DLL。該擴展基本上使用加載保存的模型
LoadSavedModel(session_options, run_options, m_modelDir, { tensorflow::kSavedModelTagServe }, &model_bundle_lite);
并使用對影像進行推理
model_bundle_lite.GetSession()->Run(inputs_, output_names, {}, &predictions);
Tensorflow DLL 是根據說明使用 bazel 構建的。
目前功能上似乎沒有問題,如果我用發布配置編譯我的擴展。我們想檢查使用除錯配置編譯我們的擴展并利用原始 Tensorflow.dll 的某些方面。沒有任何變化,模型相同,影像相同。但是擴展在LoadSavedModel(session_options, run_options, m_modelDir, { tensorflow::kSavedModelTagServe }, &model_bundle_lite);
標準catch陳述句中沒有捕獲到錯誤。我無法除錯模型加載后的代碼。
這種行為的原因是什么?我只想檢查我們代碼的功能,我不想自己除錯 TF 函式。
uj5u.com熱心網友回復:
根據生成的代碼,混合除錯和發布版本可能會導致嚴重的問題。除錯構建可以使用一些特殊的除錯分配器或其他您不知道的東西。
您可以嘗試獲取有關該問題的更多資訊的方法是附加諸如 WinDbg 之類的內容并再次加載模型。這經常幫助我查看加載程序中是否拋出了任何結構化例外。為此,您必須:
- 安裝 Windb(只需谷歌一下)
- 打開它并將除錯器附加到您的應用程式
- 嘗試加載模型
- 檢查日志并查找任何拋出的例外
uj5u.com熱心網友回復:
在 Visual Studio 中,您可以通過禁用優化和啟用除錯輸出來獲取“發布”配置中的除錯資訊;只要您不更改運行時庫并避免更改前處理器標志。
因此,“發布”配置實際上可以主要是“除錯”配置。
這可以在每個專案(以及每個檔案的某些設定)的基礎上完成。
更多詳細資訊:https : //docs.microsoft.com/en-us/cpp/build/how-to-debug-a-release-build?view=msvc-170
/Z7 除錯格式在您的場景中可能具有優勢。
但是不要嘗試混合“Debug”和“Release”專案配置,有些庫除錯設定不能通過這種方式禁用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360467.html
