0

我有一個Visual Studio 2012解決方案,包含幾個項目,一些在C中,一些在Fortran中(使用英特爾Composer XE 2013)。我經常使用iso_c_binding工具從Fortran代碼調用C代碼,但我注意到我無法有效地調試C代碼。在調試Fortran代碼的時候,我可以很好地查看變量的內容,但是如果我進入C代碼,他們會突然失去理智。大多數變量都聲稱是未定義的;傳遞給函數的任何東西都會包含不正確的值(但它仍然會區分指針和對象/ POD)。從另一個Visual Studio項目調試Visual Studio C程序

我仍然可以通過代碼;它似乎大部分都遵循預期的執行順序,但有時它會跳轉一點,這對於我使用gdb在Linux上調試編譯器優化的代碼很熟悉。

我有一個單獨的解決方案,也有C和Fortran項目。都從第一個解決方案調用同一個C項目,並且在這兩種情況下,我都可以再次調試,直到從第一個解決方案進入C項目,此時我遇到了同樣的問題。

我在做什麼錯?

+0

這聽起來像你打在頭上的釘子。當談到優化本地變量和參數到寄存器等時,VC非常積極。我只能建議你通過反彙編窗口進行調試,如果你有調試符號,它將至少告訴你每一行發生了什麼。 – WhozCraig

+0

所有優化都關閉了嗎? – kotlomoy

+0

@kotlomoy,無論優化屬性設置爲什麼,我都會遇到此問題。如果還有其他事情要檢查,請告訴我。 – patrickvacek

回答

2

這是用於優化調試代碼的標準蝙蝠信號。您需要重新排列構建設置,以便Fortran代碼鏈接到C代碼的非優化調試版本。

在你的問題中,沒有面包屑問題,首先是如何出錯的。首先檢查哪些庫已鏈接到Fortran程序中,並確保您可以在「調試和發佈」版本中查看爲您的C項目生成的不同庫。您需要鏈接由Debug版本創建的鏈接。

+0

非常混亂。我曾嘗試停用優化,但我認爲編譯或鏈接順序還有另一個問題,所以我必須先解決這個問題。感謝您指點我正確的方向! – patrickvacek