我正在做一个使用共享内存的任务,每当我运行代码时,我都会遇到段错误。因此,我尝试使用GDB调试器查看错误发生的位置,但是当它运行代码时,它会正常退出并表示正常。我粘贴了下面终端中的内容
./main
This is the cb 16669520, This is the dbInfo 2117869600, and this is the db 2117869608
this is the number of processes 1
Segmentation fault (core dumped)
它打印出的前两行很好,但是代码永远不会到达主体的末尾。然后运行调试器...
gdb ./main
(gdb) run
Starting program: /*path*/
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
This is the cb -8848, This is the dbInfo -243544032, and this is the db -243544024
this is the number of processes 2
The code got this far[Inferior 1 (process 15840) exited normally]
(gdb) backtrace
No stack.
答案 0 :(得分:1)
使用valgrind
运行程序。它将检测无效的读取和写入内存,告诉您它们发生的位置,并且很有可能足以帮助您确切地知道导致它们发生的原因。这些错误之一是导致您的程序出现段错误的原因。
在编译程序时不要忘记添加-ggdb3
标志:)
答案 1 :(得分:0)
如果valgrind没有帮助(通常是wlll),请考虑在编译时启用警告。如果可能,编译应该是“干净的”,没有任何警告。 GCC可以检测到许多常见错误。
img = skimage.img_as_float(skimage.io.imread(filename)).astype(np.float32)
来自gcc人:
gcc -Wall ... file.c # or even gcc -Wall -Wextra ... file.c