调试C :./nptl/sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录
debugging c++ : ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory
我正在使用gdb
来调试C++
程序。在行中
assert(prevId == GetTagIdFromState(maxState));
- 参数
prevId
值是0
; - 方法
GetTagIdFromState(maxState)
return
S50
;
调试此问题时,我会收到以下错误。
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
您的应用程序按预期工作。断言失败(由于您传递给它的值不等,因此assert
宏接收0),因此您的程序正在中止。这就是断言的工作方式:
如果未定义ndebug,则 servert检查其参数是否(哪个 必须具有标量类型)比较等于零。如果这样做,请断言 输出有关标准的特定于特定诊断信息 错误输出并调用std :: Aport 。
强调我的。
检查此断言参考以获取更多信息。
我只是在试图在Raspberry Pi上调试程序时遇到了此错误。该程序恰好以要求程序作为root运行的方式使用GPIO。例如,我运行了这样写的程序:
sudo ./foo
我忘记了这一点,但是,在启动调试器并尝试了
时gdb foo
我收到了您似乎遇到的错误:
Program received signal SIGABRT, Aborted.
0x76cd0f70 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
当我使用sudo运行它时,它可以正常工作。
sudo gdb foo
希望这对同一条船中的人有帮助。
这应该使您迅速使用assert函数
void assert (int expression);
评估断言如果该宏的参数表达式具有函数表格的比较等于零(即表达式为false),则将消息写入标准错误设备并流产,终止程序执行。
。所示消息的细节取决于编译器中的特定实现,但其中应包括:断言失败的表达式,源文件的名称以及其发生的行号。通常的表达格式是:
断言失败:表达式,文件文件名,行号号码如果在包括essert.h的那一刻,该宏已被禁用。这使编码器在调试程序时可以在源代码中包含许多断言呼叫,然后通过简单地包括一个类似的行,将所有呼叫都禁用到生产版本中。
#define NDEBUG at the beginning of its code, before the inclusion of assert.h.
因此,该宏旨在捕获编程错误,而不是用户或运行错误,因为在程序退出其调试阶段后通常会禁用。来自:C ref
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- 调试C :./nptl/sysdeps/unix/sysv/linux/raise.c:没有这样的文件或目录