Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么代码没有';t在代码块中的断点处中断_C++_Debugging_Codeblocks_Breakpoints - Fatal编程技术网

C++ 为什么代码没有';t在代码块中的断点处中断

C++ 为什么代码没有';t在代码块中的断点处中断,c++,debugging,codeblocks,breakpoints,C++,Debugging,Codeblocks,Breakpoints,我按照视频中的说明逐行运行代码: 然而,在我按下F8键后,它只是在没有到达断点的情况下运行(我看不到黄色三角形)。此外,我还尝试了“附加到进程”,结果也是一样的 我错过了什么吗?(顺便说一句,我的项目中有多个文件,但我想这不会是问题,对吧?因为我可以在VS studio中轻松完成这项工作。也许,我对代码块不太熟悉) 谢谢你的帮助 如果您感兴趣,这是调试器日志: Building to ensure sources are up-to-date Selecting target: Releas

我按照视频中的说明逐行运行代码:

然而,在我按下F8键后,它只是在没有到达断点的情况下运行(我看不到黄色三角形)。此外,我还尝试了“附加到进程”,结果也是一样的

我错过了什么吗?(顺便说一句,我的项目中有多个文件,但我想这不会是问题,对吧?因为我可以在VS studio中轻松完成这项工作。也许,我对代码块不太熟悉)

谢谢你的帮助

如果您感兴趣,这是调试器日志:

Building to ensure sources are up-to-date
Selecting target: 
Release
Adding source dir: C:\Users\liuca_000\Documents\Lattice_Boltzmann_code\lattice_boltzmann\
Adding source dir: C:\Users\liuca_000\Documents\Lattice_Boltzmann_code\lattice_boltzmann\
Adding file: C:\Users\liuca_000\Documents\Lattice_Boltzmann_code\lattice_boltzmann\bin\Release\lattice_boltzmann.exe
Changing directory to: C:/Users/liuca_000/Documents/Lattice_Boltzmann_code/lattice_boltzmann/.
Set variable: PATH=.;C:\Program Files (x86)\CodeBlocks\MinGW\bin;C:\Program Files (x86)\CodeBlocks\MinGW;C:\Python27\Lib\site-packages\PyQt4;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Python27;C:\Python27\DLLs;C:\Python27\Scripts;C:\Python27\Lib\site-packages\vtk;C:\Python27\gnuplot\binary;C:\Python27\Lib\site-packages\osgeo;C:\Program Files (x86)\pythonxy\SciTE-3.3.2-3;C:\Program Files (x86)\pythonxy\console;C:\MinGW32-xy\bin;C:\Program Files (x86)\pythonxy\swig;C:\Program Files (x86)\pythonxy\gettext\bin;C:\Program Files\MATLAB\R2012b\runtime\win64;C:\Program Files\MATLAB\R2012b\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\MiKTeX 2.9\miktex\bin\x64;C:\Program Files (x86)\Windows Live\Shared;C:\Users\liuca_000\AppData\Roaming\MiKTeX\2.9\miktex\bin\x64;.;\
Starting debugger: C:\Program Files (x86)\CodeBlocks\MINGW\bin\gdb.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:\Users\liuca_000\Documents\Lattice_Boltzmann_code\lattice_boltzmann\bin\Release\lattice_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
编译器选项,问题可能是项目文件路径中的空格。移动到路径中没有空格的地方解决了我的问题。
请注意:

您似乎找到了一个错误的解决方案,而且很可能是错误的解决方案 产生不良后果。(如果我弄错了,请道歉)

无法设置断点,因为生成未包含调试 信息(如你现在所知);并且构建不包含调试信息 因为您试图调试的是发布版本,而不是调试版本

您可以在生成日志中看到这一点:

添加文件:C:\Users\liuca\u 000\Documents\Lattice\u Boltzmann\u code\Lattice\u Boltzmann\bin\Release\Lattice\u Boltzmann.exe

而且:

从C:\Users\liuca\u 000\Documents\Lattice\u Boltzmann\u code\Lattice\u Boltzmann\bin\Release\Lattice\u Boltzmann.exe读取符号…(未找到调试符号)…完成

发布版本生成的可执行文件将是
\bin\Release
(按原样),并且 从调试生成将位于
\bin\Debug

通过转到构建选项->编译器标志并勾选,您似乎已经“解决”了问题 复选框生成调试符号

但是如果你回到那里,看看窗口左边的树控件,我想你会看到的 将看到:

  • 格子玻尔兹曼
    • 调试
    • 释放
选择了释放。这意味着您现在已经配置了版本构建 包含调试信息。你不想这样,因为:-

  • 尽管现在您将在可执行文件中获得调试符号,并且调试器将能够使用它们,但是发布版本在默认情况下仍然配置了高度优化(正如它应该的那样),并且您很可能会发现调试器的行为有时令人奇怪地困惑,因为优化的目标代码并不总是与源代码正确匹配

  • 调试信息将大大增加发布可执行文件的大小

您应该做的只是确保您尝试调试的构建是正确的 调试版本。为此:

  • 从顶部菜单栏导航“构建”->“选择目标”
  • 取消选中“释放”。检查调试
然后重建项目(即清理和构建),您将能够调试它 对。代码::块调试生成的默认选项非常好


不要忘记返回并从发布配置中删除
-g
选项。

今天花了相当长的时间来完成这项工作,尝试:

  • 确保使用“调试”而不是“发布”
  • “目录名中没有空格”
  • “-g勾选,-s取消勾选”
  • “每晚下载一个”

直到我发现我犯了一个新手级的错误,不熟悉IDE和调试,所以它会在断点处停止,你必须用红色箭头而不是绿色箭头来运行。所以像我这样愚蠢的人希望这能帮上忙!xD

用优化编译?代码可能会被完全删除。这是什么意思?确保t使用调试符号(-g标志)编译二进制文件如果编译器可以证明代码可以被一些更好的代码替换,从而产生相同的最终结果,那么编译器删除代码是合法的。这意味着,断点可能永远不会被击中,因为它不存在。watch@stefan你知道如何快速使用断点编译它吗?因为我在windows中,而且我不熟悉windows中的cmd。你能给我一个简短的说明如何快速更改它吗?@JonathonReinhart我应该在Linux中这样做,该死的……。你知道如何在windows中这样做吗?你在使用什么编译器?你只需查看文档。我在CodeBlocks中使用GNU GCC编译器谢谢大家!!我突然发现了这个选项”制作dubuging symbol-g“现在我发现这不是问题的答案。你是上帝!我从谷歌来到这里,这正是我问题的根源!