cmakelist添加Debug
SET(CMAKE_BUILD_TYPE “Debug”)
SET(CMAKE_CXX_FLAGS_DEBUG “
E
N
V
C
X
X
F
L
A
G
S
−
O
0
−
W
a
l
l
−
g
2
−
g
g
d
b
"
)
S
E
T
(
C
M
A
K
E
C
X
X
F
L
A
G
S
R
E
L
E
A
S
E
"
ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb") SET(CMAKE_CXX_FLAGS_RELEASE "
ENVCXXFLAGS−O0−Wall−g2−ggdb")SET(CMAKECXXFLAGSRELEASE"ENV{CXXFLAGS} -O3 -Wall”)
gdb查看内存数据
格式: x /nfu
说明:
x 是 examine 的缩写,意思是检查。
n表示要显示的内存单元的个数,比如:20
f表示显示方式, 可取如下值:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
x /20xh 0x7fffffffe080
GDB调试技巧
要调试已经启动的进程,或是调试陷入死循环而无法返回控制台的进程时,可以使用 attach 命令。格式:attach
gdb 和进程分离时使用 detach 命令,调试的进程就从 gdb 的控制下释放出来。进程被 detach 后继续运行。进程信息可以用 info proc 命令显示。
守护者进程在启动好子进程后,会自动关闭主进程,如果没有设定监控模式的话,gdb 会提示断开与进程的链接。所以必须设定监控对象,设置命令为 set follow-fork-mode child/parent。
gdb debug
gdb ./myprog
Here are some basic commands to get you going:
b lineno - set a break point at line ‘lineno’
b srcfile:lineno - set a break point in source file ‘srcfile’ at line ‘lineno’
r - run the program
s - step through the next line of code
c - continue execution up to the next breakpoint
p varname - print the value of the variable ‘varname’
cuda-debug
查看debug信息。
readelf -S libxxx.so |grep debug
参考文章
- https://blog.csdn.net/horotororensu/article/details/82256832
- https://blog.csdn.net/zdy0_2004/article/details/80102076
- http://www.zzvips.com/article/14715.html
- https://stackoverflow.com/questions/5115613/core-dump-file-analysis
- https://stackoverflow.com/questions/8305866/how-do-i-analyze-a-programs-core-dump-file-with-gdb-when-it-has-command-line-pa
- https://betterexplained.com/articles/debugging-with-gdb/
- pytorch debug https://zhuanlan.zhihu.com/p/83611204