我正在使用Visual Studio 2015编写C程序。
我的C可执行文件链接一个.lib
文件,这个文件是从我的可执行文件中分开构建的。
.lib
文件也是用C语言编写的,并以以下方式构建:
cl.exe 标志:
/nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /Od /GL- /Gy /EHs-c- /GR- /GF /Z7 /Gm- /Gw
link.exe 标志:
/NOLOGO /LTCG
我的可执行文件是这样构建的:
cl.exe 标志:
/GS- /TC /W4 /Zc:wchar_t Z7 /Gm /O1 /Fd"C:\source\TEST2.pdb" /Zc:inline /fp:precise /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /MTd /Fa"x64\Debug\" /Fo"C:\source\x64\Debug\" /Fp"x64\TEST2.pch" /c /WX- /GS- /W4 /Gs32768 /D UNICODE /Od /GL- /Gy /EHs-c- /GR- /GF /Z7 /Gm- /Gw /wd4054 /wd4477 /U_DEBUG
link.exe 标志:
/OUT:"C:\source\x64\Debug\TEST2.exe" /MANIFEST /NXCOMPAT /PDB:"C:\source\x64\Debug\TEST2.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X64 /INCREMENTAL:NO /PGD:"C:\source\x64\Debug\TEST2.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Debug\TEST2.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:msvcrtd.lib
当我调试整个应用程序时,我在某些 库中的断点遇到以下错误。
我做了一些实验。
在出现问题的 .c
文件中,我尝试在所有 C 函数的开头大括号和结尾大括号之间添加断点对。
我注意到对于某些函数,断点对可以被触发。如下所示:
但是,我遇到了一个函数,在该函数的结尾大括号处的断点无法被触发。如下所示:
所有后续函数都遇到了相同的问题。
我查看了这个线程。
我尝试了清理重建,但没有用。
我使用了 /Z7
,因此没有 PDB 文件。我猜想所有的调试信息都嵌入在 lib 文件中。
我使用了 /Od
,因此我猜想优化不会影响我的实验。
那么可能出了什么问题呢?
有人能够提供一些帮助吗?谢谢。
.lib
只是打包了一堆obj
。所以我猜调试信息应该在里面。无论如何,我会尝试一下。 - smwikipedia