在ubuntu下调试libco 调试example_thread时 遇到这样的问题
gdb list显示的不是对应的源文件example_thread.cpp 而是指向了另一个libco的源文件coctx_swap.S
排查后发现是GCC的代码优化等级影响了调试符号的生成
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -g -fno-strict-aliasing -O2 -Wall -export-dynamic -Wall -pipe -D_GNU_SOURCE -D_REENTRANT -fPIC -Wno-deprecated -m64)
将代码优化关闭后解决
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -g -fno-strict-aliasing -O0 -Wall -export-dynamic -Wall -pipe -D_GNU_SOURCE -D_REENTRANT -fPIC -Wno-deprecated -m64)
得出结论 : gdb调试debug代码时,应该关闭GCC的编译器代码优化.