debugging c ++:../ nptl/sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录

wan*_*iju 14 c++ gdb

我正在gdb用来调试C++程序.在线

assert(prevId ==  GetTagIdFromState(maxState));
Run Code Online (Sandbox Code Playgroud)
  • 参数prevId值是0;
  • 方法GetTagIdFromState(maxState) returns 50;

调试时,我收到以下错误.

Assertion `prevId == GetTagIdFromState(maxState)' failed.
Program received signal SIGABRT, Aborted.
0x00007ffff6ecbba5 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64    ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
      in ../nptl/sysdeps/unix/sysv/linux/raise.c
Run Code Online (Sandbox Code Playgroud)

Sin*_*all 9

您的应用程序按预期工作.断言失败(因为传递给它的值不相等,assert宏接收0),因此您的程序正在中止.这是断言的工作方式:

如果未定义NDEBUG,则断言检查其参数(必须具有标量类型)是否等于零.如果是,则断言输出标准错误输出的特定于实现的诊断信息,并调用std :: abort.

强调我的.

检查此断言参考以获取更多信息.

  • 先谢谢你 我是C++的新手.我知道断言失败了,但是你可以给我一些建议,为什么错误"../nptl/sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录." araises.似乎程序找不到该文件. (5认同)
  • 没什么值得担心的.断言宏调用(可能是间接)一个名为raise的函数.这是在您与代码链接的库中发生的.当编译该库(在其他一些机器上)时,有一个名为"../nptl/sysdeps/unix/sysv/linux/raise.c"的文件,但现在当它在您的机器上运行时该文件不再存在.如果你想让这个错误消失,你可能需要下载这个库的源代码. (5认同)