代码调试
包括多种代码调试方法,打印日志相关
无聊的阿乐
每天进步一点点,量变才会质变
展开
-
telnet 查看目标主机是否打开了某端口
(1)telnet客户进程和终端用户本身就是通过tcp建立连接的,当然前提是双方都打开了相应的port,如果失败,那就证明没有开放次端口(当然这个不是绝对的,例如防火墙限制)(2)从过程来看,“telnet 目标ip” 就是想连接目标ip的telnet服务嘛,而且要默认占用对端的23端口;后面又跟上另外一个端口算怎么回事啊?telnet服务目的端默认的端口是23,这是应用层的C/S,所以你telnet+ip地址是可以的,原创 2023-03-25 12:55:39 · 1331 阅读 · 0 评论 -
java项目发布到Linux
java发布到linux下原创 2023-03-17 11:15:04 · 1415 阅读 · 0 评论 -
Windows环境下安装使用Redis
(备注:通过这个命令,会创建Redis临时服务,不会在window Service列表出现Redis服务名称和状态,此窗口关闭,服务会自动关闭。重新启动Redis服务。原创 2023-03-08 19:38:39 · 58 阅读 · 0 评论 -
使用epoll 提高服务器的处理能力
参考《后台开发:核心技术与应用》7.5小节运行平台为Linux2、client.cpp3、现象从执行结果中可以看出,比如客户端给服务器发了“ aa_00 。”,客户端最终输出到标准输出的是“ aa_00_01 ”, 这也证明了给服务器发包和输出数据到标准输出时,用的是write 函数( count 只有在调用 write 函数时才会自增)...原创 2022-07-10 14:25:17 · 104 阅读 · 0 评论 -
TCP keepalive 保活 的详解
TCP通信保活参数原创 2023-02-23 21:47:38 · 473 阅读 · 0 评论 -
基于QT5.14.2的MQTT通信
默认的Qt环境是不能使用MQTT的,但Qt官方提供了基于MQTT的封装,需要通过源码进行编译。在dev分支中可以选择MQTT版本,选择最新的下载到本地。注意一定要选择对应自己QT版本的MQTT源码,我使用的是QT5.14.2,所以MQTT的版本也得是5.14.2.将以上两个文件夹拷贝到以下目录中这样MQTT就已经配置到我们本地的Qt环境中了。后续所有使用此Qt环境的项目都可以直接使用MQTT了。原创 2023-02-14 17:37:49 · 2156 阅读 · 1 评论 -
QT开发安卓程序初识
Qt | Qt For Android、Qt5.14.2安卓开发环境搭建详细步骤测试结果如下:原创 2023-02-10 11:08:52 · 334 阅读 · 0 评论 -
QT中的路径名不能包含空格
QT报错,路径名不能有空格原创 2023-02-10 11:07:22 · 364 阅读 · 1 评论 -
Linux中运行QT程序报错:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supp
Linux 下调试QT原创 2023-02-07 18:36:40 · 1594 阅读 · 1 评论 -
DSP程序烧写bin文件到flash中,及下载到flash中无法运行的问题
DSP调试经验原创 2022-12-23 17:11:07 · 2949 阅读 · 1 评论 -
QT中遇到问题:QObject: Cannot create children for a parent that is in a different thread.
运行的时候默认是在主线程中创建的,然后你又把它移到了子线程,所以会出现在子线程中调用了主线程中的对象,所以会报错。然后你在把它移到子线程中时,该对象也会跟着移过去。原创 2022-11-23 15:16:33 · 1515 阅读 · 0 评论 -
关于性能测试代码的一些记录(可以将测试记录输出到文件里,记录日志)
性能测试分为Mbps 和Tps。Mbps=Mbit/s即兆比特每秒(1,000,000bit/s),Million bits per second的缩写,是一种传输速率单位,指每秒传输的位(比特)数量。其中:bit代表位或比特,存放一位二进制数,即 0 或 1,最小的存储单位Byte代表字节,8个二进制位为一个字节,即1Byte=8bit,Byte为数据量常用单位。bps是每秒比特率,8bps=1B/s(字节)而M是2的20次方,或略作10的6次方。所以1Mbps=1024Kbps或128KB/s原创 2021-09-28 15:02:26 · 517 阅读 · 0 评论 -
VS2015采用loadlibrary方式调用dll库
顺便再讲下关于调用约定和函数符号的关系,即_stdcall,_cdecl.还有就是extern"c"对函数名符号的影响。说明库里边已经把函数导出来了,使用loadlibrary的时候需要和导出名字对应上。由于_stdcall是被调用方清理堆栈,所以函数符号里面包含了传参的信息。我们先编译一个库文件,然后采用Loadlibrary的方式调用。由于_cdecl是调用方清理堆栈,所以只需要函数名就可以。+函数名+@@YG+返回类型+参数1类型…+函数名+@@YA+返回类型+XZ。.........原创 2022-07-28 22:30:59 · 1376 阅读 · 0 评论 -
VS2015使用dumpbin 查看库的导出函数符号
dumpbin是VS2015自动安装的,使用VS2015自带的命令行可以打开使用。原创 2022-07-27 18:20:49 · 360 阅读 · 0 评论 -
代码调试-打印日志输出到文件
1、将日志输出到文件函数void logprintf(const char *fmt, ...)//自定义可变参数函数{ static int bLogFirstOpen = 0; //函数体内定义的静态局部变量,它的生命期跟全局变量相同,在整个程序运行期间一直保留; //它的可见性跟局部变量相同,只有在这个函数内部才能通过这个变量名访问这个变量。 static char* Log_file = "./libs原创 2022-02-21 11:09:43 · 768 阅读 · 0 评论 -
VS2015—编译、静态库动态库制作以及断点调试
VS2015—编译、静态库动态库制作以及断点调试原创 2021-11-20 13:14:18 · 1071 阅读 · 0 评论 -
调试代码快速定位到出错位置
#define ERROR_MSG(format, ...) \ fprintf(stderr, "Fi:%s Func:%s Line:%d " format, __FILE__, __FUNCTION__,__LINE__, ##__VA_ARGS__) #define DEBUG_MSG(format, ...) \ fprintf(stdout, format, ##__VA_ARGS__) 用法:rv = SKF_DigestInit(data->hDev, S原创 2022-01-19 15:40:26 · 406 阅读 · 0 评论 -
Linux 下gdb调试学习
还有更详细的gdb调试资料,参考Linux下如何使用gdb调试一、首先看一下编译选项下面是gcc/g++常用编译选项,我们的可执行文件要能够被gdb调试,必须在编译时加上调试信息,也即是加上-g选项例如: gcc -g test.c -o test二、看一下常用命令1、启动gdb调试,-q :不输出版本信息,或者不加-q 会显示好多版本信息此处platform.exe 为要调试的可执行程序gdb -q platform.exe xcl@ubuntu:~/platform/sampl原创 2022-02-06 15:11:14 · 1361 阅读 · 0 评论 -
可变参数宏的一些使用方法,方便打印log、出错信息等(出错后可以定位到哪一个文件,哪一个函数,哪一行)
宏定义:#define ERROR_MSG(format, ...) \ fprintf(stderr, "Fi:%s Fuc:%s L:%d"format, __FILE__, __FUNCTION__,__LINE__, ##__VA_ARGS__) #define DEBUG_MSG(format, ...) \ fprintf(stdout, format, ##__VA_ARGS__) 具体使用:rv = SKF_ConnectDev((LPSTR)input, &am原创 2021-08-28 15:06:46 · 168 阅读 · 0 评论 -
打印加密解密的数据、公钥私钥的函数,记录一下,方便以后直接使用
打印加密解密数据的函数://函数定义void print_data(const char *string, unsigned char*data, int size){ int i; printf("---------------------------------------------\n"); printf("%s:\n", string); for(i=0; i<size; i++) { printf("%02x ", data[i]); if((i%16) == 1原创 2021-08-28 14:46:43 · 369 阅读 · 0 评论 -
复杂结构体定义的同时赋值 - 签名结构体,公钥结构体
签名数据结构体定义typedef struct ECCSignature_st{ unsigned char r[64]; unsigned char s[64];}ECCSignature;签名数据结构体赋值ECCSignature sig = { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0原创 2021-08-28 14:33:38 · 368 阅读 · 0 评论