为什么代码在代码块中的断点处没有中断
Why the code doesn't break at the breakpoint in code blocks
我按照此视频中的说明逐行运行代码:
http://www.youtube.com/watch?v=6CGH9Z19dS8
但是,在我按 F8 后,它只是运行而不转到断点(我看不到黄色三角形)。此外,我还尝试了"附加到进程",它是一样的。
我错过了什么吗?(顺便说一句,我的项目中有多个文件,但我想这不会是问题,对吧? 因为我可以在 VS Studio 中轻松做到这一点。也许,我对代码块不是那么熟悉)
感谢您的帮助!
如果您有兴趣,这是调试器日志:
Building to ensure sources are up-to-date
Selecting target:
Release
Adding source dir: C:Usersliuca_000DocumentsLattice_Boltzmann_codelattice_boltzmann
Adding source dir: C:Usersliuca_000DocumentsLattice_Boltzmann_codelattice_boltzmann
Adding file: C:Usersliuca_000DocumentsLattice_Boltzmann_codelattice_boltzmannbinReleaselattice_boltzmann.exe
Changing directory to: C:/Users/liuca_000/Documents/Lattice_Boltzmann_code/lattice_boltzmann/.
Set variable: PATH=.;C:Program Files (x86)CodeBlocksMinGWbin;C:Program Files (x86)CodeBlocksMinGW;C:Python27Libsite-packagesPyQt4;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:WindowsSystem32;C:Windows;C:WindowsSystem32wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:Python27;C:Python27DLLs;C:Python27Scripts;C:Python27Libsite-packagesvtk;C:Python27gnuplotbinary;C:Python27Libsite-packagesosgeo;C:Program Files (x86)pythonxySciTE-3.3.2-3;C:Program Files (x86)pythonxyconsole;C:MinGW32-xybin;C:Program Files (x86)pythonxyswig;C:Program Files (x86)pythonxygettextbin;C:Program FilesMATLABR2012bruntimewin64;C:Program FilesMATLABR2012bbin;C:Program FilesTortoiseSVNbin;C:Program FilesMiKTeX 2.9miktexbinx64;C:Program Files (x86)Windows LiveShared;C:Usersliuca_000AppDataRoamingMiKTeX2.9miktexbinx64;.;
Starting debugger: C:Program Files (x86)CodeBlocksMINGWbingdb.exe -nx -fullname -quiet -args C:/Users/liuca_000/Documents/Lattice_Boltzmann_code/lattice_boltzmann/bin/Release/lattice_boltzmann.exe
done
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Reading symbols from C:Usersliuca_000DocumentsLattice_Boltzmann_codelattice_boltzmannbinReleaselattice_boltzmann.exe...(no debugging symbols found)...done.
Debugger name and version: GNU gdb (GDB) 7.5
Child process PID: 16672
[Inferior 1 (process 16672) exited normally]
Debugger finished with status 0
标记了-g
编译器选项,问题也可能是项目文件路径中的空格。移动到路径中没有空格的地方解决了我的情况。看到: http://wiki.codeblocks.org/index.php?title=Debugging_with_Code::Blocks#Path_with_spaces
我认为您日志的这一部分说明了原因:
(未找到调试符号)
构建代码的调试版本 - 不包含优化,不包括或构建调试符号,然后重试。
今天花了相当长的时间尝试:
- "
- 确保使用"调试"而不是"发布"
- "目录名称中没有空格"
- "-g 勾选,-s 未勾选"
- "每晚下载"
没有一个工作,直到,我想我一直在犯一个非常新手的错误,不熟悉 IDE 并进行调试,以便它在中断点停止,您必须使用红色箭头而不是绿色箭头运行。所以任何像我这样愚蠢的人都希望这有帮助!xD
您似乎找到了一个错误的解决方案,并且可能产生不良后果。(如果我弄错了,请道歉)
无法设置断点,因为生成不包含调试信息(如您现在所知);并且构建不包含调试信息因为你正在尝试调试发布版本而不是调试版本。
您可以在构建日志中看到以下内容:
添加文件:C:\用户\liuca_000\文档\Lattice_Boltzmann_code\lattice_boltzmann\bin\释放\lattice_boltzmann.exe
以及:
从 C:\用户\liuca_000\文档\Lattice_Boltzmann_code\lattice_boltzmann\bin\释放\lattice_boltzmann.exe...(未找到调试符号)...做。
发布版本生成的可执行文件将按原样<project_dir>binRelease
,可执行文件从调试版本将处于<project_dir>binDebug
看来您已经通过转到构建选项 ->编译器标志并勾选来"解决"问题复选框生成调试符号。
但是如果你回到那里,看看窗口左侧的树控件,我希望你将看到:
- lattice_boltzmann
- 调试
- 释放
,选择"发布"。这意味着您现在已经配置了发布版本以包含调试信息。你不想要这样,因为:-
-
尽管您现在将在可执行文件中获得调试符号,并且调试器将能够使用它们,但默认情况下,发布版本仍配置了高优化(应该是这样),并且您很可能会发现调试器的行为有时令人费解,因为优化的目标代码并不总是与源代码正确匹配。
-
您的 Release 可执行文件的大小将因调试信息而大大增加。
你应该做的只是确保你尝试调试的构建是调试版本。为此:
- 从顶部菜单栏导航 构建 -> 选择目标
- 取消选中发布。检查调试
然后重新生成项目(即清理和构建),您将能够调试它适当地。代码::块 调试构建的默认选项非常好。
不要忘记返回并从发布配置中删除-g
选项。
- 我的代码运行良好,但在游戏循环中中断
- 使用个人C++库编译代码时,与头文件一起使用时会中断
- 中断长代码 snprintf 格式和参数
- 为什么我的代码在第一个 if 语句处中断?
- 如何在不中断剩余代码的情况下仅C++中输入整数
- 移动返回对象的构造函数会中断C++98 代码?
- 为什么使用复制构造函数会导致此代码中断?
- VS2015 中的方法存在检查器代码中断
- 递归期间代码执行中断
- 添加<iostream>会中断 G++-7 中的代码
- 为什么Visual Studio Release生成在未执行的代码行中断
- 中断代码执行
- 如何中断本机扩展代码而不杀死解释器
- C++代码中断行,为了我的爱,我无法修复它
- F2C 转换的代码中断,当由编译器优化时C++
- 将布尔值转换为字符会产生错误和代码中断
- 尝试分配值时C++代码中断
- 如何从主机代码中断或取消 CUDA 内核
- Struct +函数代码中断
- 当我不输出变量时,代码中断;我什么时候工作。