编译与调试
编译原理,编译器和调试器的使用等
我要精通C++
这个作者很懒,什么都没留下…
展开
-
GDB的堆栈中出现??()
动态链接库中的函数名未解析:当程序中调用了动态链接库中的函数时,如果对应的动态链接库没有正确加载或者动态链接库中的函数名未能正确解析,也可能会出现?缺少符号表信息:如果程序的可执行文件没有包含符号表信息,或者 gdb 没有加载符号表信息,就无法确定函数名和代码位置等信息,因此可能会出现?野指针或者内存损坏:当程序中使用了野指针或者出现了内存损坏时,可能会导致调用了无法识别的函数名,从而出现?如果是动态链接库中的函数名未解析的问题,可以尝试重新加载动态链接库或者确认动态链接库中的函数是否存在。原创 2024-04-12 11:44:23 · 382 阅读 · 0 评论 -
关于core文件
core文件的相关知识原创 2022-07-24 14:49:10 · 1373 阅读 · 0 评论 -
pstack和dmesg
调试原创 2022-06-11 11:13:10 · 125 阅读 · 0 评论 -
Debugging Hooks
调试钩子原创 2022-06-07 09:17:34 · 168 阅读 · 0 评论 -
编译动态库并未包含头文件,但是gcc不报错的分析
编译问题原创 2022-06-06 21:45:32 · 780 阅读 · 0 评论 -
0x0000000000000000 in ??
栈溢出原创 2022-06-01 15:54:24 · 971 阅读 · 0 评论 -
如何用同名函数覆盖掉标准库中的函数?
0.引用gcc-g++使用自定义的同名函数覆盖C库函数这里提出了两个方法1.预备做测试的方案1.gcc的no-builtin参数;2.LD_PRELOAD方法;3.自己写一个sharelib原创 2022-05-21 13:27:09 · 503 阅读 · 0 评论 -
.lo文件
链接1链接2o: 编译的目标文件a: 静态库,其实就是把若干o文件打了个包so: 动态链接库(共享库)lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息la: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息The ‘.lo’ file is a library object, which may be built into a shared library, and the ‘.o’ file is a standard o原创 2022-05-09 16:40:10 · 1258 阅读 · 0 评论 -
extern “C“和它的境界
首先我要声明一下我是来吐槽的,今天下午编代码,报【对‘functionname(char const*, int, unsigned char**)’未定义的引用】,明明我的库有了,路径有了,也加到系统去了,为什么?这就是是为什么??????之后寻寻觅觅搞了一个多小时,才发现写那个库的人的头文件里没有对它的c文件中的函数用extern "C",太遗憾了,不高明,害我浪费那么多的时间,还要花时间来吐槽。望周知:用C语言写库的时候一定要考虑它儿子C++能用,extern "C"是基本素养,要做一个好爸爸原创 2022-04-27 16:15:05 · 283 阅读 · 0 评论 -
《程序员的自我修养》-勘误1-未经核验
[muten@localhost Compiler]$ more ManualNameMangling.cpp#include <stdio.h>namespace myname{ int var = 42;}extern "C" double _ZN6myname3varE;int main(){ printf("%d\n",_ZN6myname3varE); return 0;}原创 2021-10-12 23:09:44 · 256 阅读 · 0 评论 -
gcc常连接的动态库小结
gcc -lm 是什么意思?原创 2021-09-15 20:35:23 · 1988 阅读 · 0 评论 -
undefined symbol: Py_initModule4
今天在编译代码的时候报错【undefined symbol: Py_initModule4】,要看看python的版本的问题.原创 2021-08-10 09:46:33 · 720 阅读 · 0 评论 -
Linux程序运行时找不到动态库的解决方法
Reference1原创 2021-12-09 19:29:53 · 239 阅读 · 0 评论 -
词法分析器Lexer
词法分析器Lexer原创 2021-09-24 08:59:25 · 356 阅读 · 0 评论 -
编译原理-引言
1.内容组成原创 2021-10-03 10:11:02 · 256 阅读 · 0 评论 -
libiconv库链接问题一则
libiconv库链接问题一则原创 2021-08-24 21:11:41 · 174 阅读 · 0 评论 -
时不时地打一下*this,会有意向不到的效果
原创 2021-09-04 14:22:01 · 107 阅读 · 0 评论 -
【软件调试】在Centos下安装dwarfdump
官网给的安装方法链接1.进入安装目录cd /home/muten/module/libdwarf2.下载安装包wgethttps://www.prevanders.net/libdwarf-20201201.tar.gz3.解压安装包tar -xvf https://www.prevanders.net/libdwarf-20201201.tar.gz4.进入源码被解压缩目录cd libdwarf-202012015.配置并编译./configuremake -j8..原创 2021-02-04 15:17:16 · 1090 阅读 · 1 评论 -
学习一下ldd
. 2021/4/2 12:14:50这个怎么处理啊Teacher 2021/4/2 12:19:50You can add it in/etc/bashrc, say, at the end.export PATH=$PATH:/usr/local/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib. 2021/4/2 12:21:08/etc/bashrc是一个文件吗. 2021/4/2 12:21:19...原创 2021-05-19 07:23:32 · 1442 阅读 · 0 评论 -
ar-静态库的制作与使用
链接1原创 2021-09-22 14:51:43 · 273 阅读 · 0 评论 -
ldconfig
Ubuntu18.04安装cJSON之后,找不到文件 libcjson.so.1_MIIEo-CSDN博客原创 2021-09-29 16:43:25 · 221 阅读 · 0 评论 -
GENERIC,GIMPLE和RTL
GENERIC,GIMPLE和RTL原创 2021-09-24 00:08:34 · 152 阅读 · 0 评论 -
高级语言及其文法
1.语言概述2.基本定义3.文法的定义4.文法的分类5.CFG的语法树6.CFG的二义性7.本章小结原创 2021-10-10 22:17:14 · 268 阅读 · 0 评论 -
《程序员的自我修养-链接-装载与库》第三章 目标文件里有什么(2)
5.链接的接口-符号 链接过程的本质就是要把多个不同的目标文件之间相互“粘”到一起,或者说像玩具积木一样,可以拼装形成一个整体。为了使不同目标文件之间能够相互粘合,这些目标文件之间必须有固定的规则才行,就像积木模块必须有凹凸部分才能够拼合。在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。比如目标文件B要用到了目标文件A中的函数“foo”,那么我们就称目标文件A定义(Detine)了函数“foo”,称目标文件B引用(Reference)了目标文原创 2021-10-10 13:41:44 · 329 阅读 · 0 评论 -
《程序员的自我修养-链接-装载与库》第二章 编译与链接
对于平常的应用程序开发,我们很少需要关注编译和链接过程,因为通常的开发环境都是流行的集成开发环境(IDE),比如 Visual Studio、Delphi等。这样的IDE一般都将编译和链接的过程一步完成,通常将这种编译和链接合并到一起的过程称为构建(Build)。即使使用命令行来编译一个源代码文件,简单的一句“gcc hello.c”命令就包含了非常复杂的过程。 IDE和编译器提供的默认配置、编译和链接参数对于大部分的应用程序开发而言已经足够使用了。但是在这样的开发过程中,...原创 2021-10-03 09:14:27 · 1122 阅读 · 1 评论 -
《程序员的自我修养-链接-装载与库》第三章 目标文件里有什么(1)
0.引言1.目标文件的格式2.目标文件是什么样的3.挖掘SimpleSection.o4.ELF文件结构描述5.链接的接口-符号6.调试信息7.本章小结原创 2021-10-05 13:47:20 · 586 阅读 · 1 评论 -
【GDB】0xffffffffffffffe8 - 对某些struct结构体使用memset引起的core问题
memset to struct 引起的coreit = {first = <error reading variable: Cannot access memory at address 0xffffffffffffffe8>, second = { m_Deviceid = <error reading variable: Cannot access memory at address 0xffffffffffffffe8>, m_Loopback原创 2022-02-15 21:47:11 · 1765 阅读 · 0 评论 -
【GDB】gdb的观察点
gdb的观察点原创 2021-09-25 13:23:28 · 222 阅读 · 0 评论 -
【软件调试】gdb初识
1.gcc -g这个代码会比不加-g参数编译出来的代码多出"调试信息"和"符号表".原创 2021-02-04 15:05:04 · 464 阅读 · 0 评论 -
gdb-删除断点
gdb 先查看断点号,然后删除断点i b --查看断点号d 断点号--删除断点原创 2021-09-03 16:20:06 · 7451 阅读 · 0 评论 -
gdb-set print pretty on
#include <stdio.h>#include <string.h>#include <string>using namespace std;class Test{public: int a; int b; int c; int d; int e; int f; string g; string h; string i; string j;};int main(){ { Te.原创 2021-09-25 14:11:30 · 1484 阅读 · 0 评论 -
No symbol table info available
1.修改配置文件先修改“/etc/yum.repos.d/CentOS-Debuginfo.repo”文件的enable=12.执行debuginfo-install glibc-2.17-325.el7_9.x86_64[root@master ~]# debuginfo-install glibc-2.17-325.el7_9.x86_64Loaded plugins: fastestmirror, langpacks, product-id, subscription-mana...原创 2022-01-07 15:52:32 · 2962 阅读 · 0 评论 -
【软件调试】dwarf,readelf,strip
gcc -g main.c -m32 -o main.debug (main.debug可以用dwarf和readelf看到调试信息的)gcc main.c -m32 -o main.nodebug(用dwarf和readelf观察main.nodebug是看不到调试信息的,经过strip之后连符号表也会消失)原创 2021-02-04 16:39:15 · 866 阅读 · 0 评论 -
【软件调试】GDB的函数调用
1.调试代码#include <stdio.h>#include <unistd.h>int main(){ int i = 0; while(1){ sleep(1); printf("%d\n",i++); } }2.调式过程原创 2021-02-06 21:31:15 · 754 阅读 · 0 评论 -
【软件调试】GDB调试死锁的简单示例
目录1.调试代码2.调试过程及涉及的命令1.调试代码#include <stdio.h>#include <pthread.h>#include <unistd.h>pthread_mutex_t mutex_1;pthread_mutex_t mutex_2;void *child1(void *arg){ while(1){ pthread_mutex_lock(&mutex_1); .原创 2021-02-06 21:00:48 · 222 阅读 · 0 评论 -
GDB的小技巧
将GDB中需要的调试信息输出到文件# (gdb) set logging file filename# (gdb) set logging on# (gdb) thread apply all bt# (gdb) set logging off# (gdb) quit详细说明:1.# (gdb) set logging file filename设置输出的文件名称2.# (gdb) set logging on输入这个命令后,此后的调试信息将输出到指定文件3.# (gdb) .原创 2021-09-24 14:32:41 · 1717 阅读 · 0 评论 -
【GDB】调试C++的插件,DEBUG下的异常指标
一个教材链接原创 2021-03-18 14:53:18 · 345 阅读 · 0 评论 -
GDB调试时,出现value optimized out的解决办法小结
阅读引用1原创 2021-04-18 14:07:37 · 1105 阅读 · 0 评论 -
gdb exename之后如何指定命令行参数-set args
【TARS】基于TARS的调试gdb /home/muten/module/TARS/TarsFramework/build/servers/tarsregistry/bin/tarsregistry>b Application.cpp:1304>set args --config=/usr/local/app/tars/tarsregistry/conf/tars.tarsregistry.config.conf/home/muten/module/TARS/TarsFra.原创 2021-09-17 10:14:50 · 243 阅读 · 0 评论 -
【软件调试】GDB调试多线程的简单示例
目录1.调试代码2.调试过程与涉及到的命令1.调试代码#include <stdio.h>#include <pthread.h>#include <sys/types.h>struct thread_param{ char info; int num;};void* thread_fun(void* param){ struct thread_param* p; p = (struct.原创 2021-02-06 19:50:55 · 234 阅读 · 0 评论