pjo*_*son 10 debugging gcc visual-c++
我有一个程序,我打算分发给最终用户,并希望收到他们的崩溃报告.如果我使用MSVC,我会生成minidump并将那些发送给我,然后用相应的PDB检查它们以获得有用的堆栈跟踪,至少.
与GCC相同的是什么?我可以生成堆栈跟踪,但如果我希望它有用,则需要将调试符号编译到可执行文件中(使用-g).显然,这对于发布分发来说是不可接受的,因为可执行文件的大小可能相当大.
我google了一下,发现objcopy的引用能够将调试符号分离到一个单独的文件,但该页暗示我仍然需要在发布可执行文件旁边提供调试符号,这显然是不可接受的.
好吧,我们的想法是你编译时-g添加调试符号但不会减慢程序速度,即.大多数程序都会这样做,-g -O2你可以分开调试符号objdump.之后,您可以strip发布版本,因此它不会有任何调试符号.
更新:最近的gdb支持单独的调试文件,请参阅https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html
例如,你可以做
objcopy --only-keep-debug prog prog.debug
strip prog
Run Code Online (Sandbox Code Playgroud)
现在您prog将没有任何调试符号.但您可以使用proc.debug文件在gdb中调试它.
我找不到一个确切的答案,但我找到了一个同样有效的替代解决方案:在-g旁边编译优化和其他发布标记,将生成的可执行文件存储在某处,然后使用strip删除调试符号.发送剥离的可执行文件,当您获得堆栈跟踪时,将addr2line与原始的未提取的可执行文件结合使用,您应该返回所有符号.
| 归档时间: |
|
| 查看次数: |
4512 次 |
| 最近记录: |