VsCode编译调试Suricata

原理:

Suricata 源码说到底也是一个makefile项目,Code 是绝对可以编译的,本质上还是模拟 make 命令,然后使用GDB调试c程序。

有一个视频: https://www.bilibili.com/video/BV1Aw4m1U7Mo/?vd_source=b6d10e8288ab2f9afe2227a94446a6c3

c_cpp_properties.json:

实际上这部分是关于 代码悬停提示,智能提示这一方面的,

关于includepath和browse ->path的介绍有一个视频:https://www.bilibili.com/video/BV1Hm411r7nq/?vd_source=b6d10e8288ab2f9afe2227a94446a6c3

{"configurations": [{"name": "daxian-2023-12-24","includePath": ["${workspaceFolder}/**","/usr/include/**","/usr/local/include/**","/usr/include/netinet/**"],"defines": [],"compilerPath": "/usr/bin/g++","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "gcc-x64","browse": {"path": ["${workspaceFolder}","/usr/include/netinet"],"limitSymbolsToIncludedHeaders": true,"databaseFilename": ""},"configurationProvider": "ms-vscode.makefile-tools"}],"version": 4
}

settings.json

这其实和编译无关,涉及到一些 vsocode 的配置

{"window.zoomLevel": 0.5,"files.exclude": {"**/.exe": true  //排除尾缀为.exe的文件不在编辑器左边的目录菜单中显示},// "C_Cpp.intelliSenseEngine": "Tag Parser",/*或者是default模式(默认也是这个)*/"C_Cpp.exclusionPolicy": "checkFilesAndFolders","C_Cpp.default.intelliSenseMode": "gcc-x64","C_Cpp.default.compilerPath": "/usr/bin/g++","C_Cpp.default.cppStandard": "c++17","debug.onTaskErrors": "abort","files.associations": {"iostream": "cpp","suricata-common.h": "c","cstdlib": "c","array": "c","istream": "c","ostream": "c","tuple": "c","type_traits": "c","utility": "c","fstream": "c","streambuf": "c","queue.h": "c","deque": "c","string": "c","unordered_map": "c","vector": "c","string_view": "c","initializer_list": "c","functional": "c","threads.h": "c","threadvars.h": "c","util-lua.h": "c","util-lua-http.h": "c","detect-threshold.h": "c","*.tcc": "c","numeric": "c","sstream": "c","detect-engine-register.h": "c","detect-engine-build.h": "c"},"C_Cpp.errorSquiggles": "enabled","workbench.editor.wrapTabs": false,/*选项卡是否换行*/"editor.wordWrap": "off",/*编辑区域是自动换行*/// "editor.renderWhitespace": "all"/*让空格显示为点  selection*/}

tasks.json

执行编译任务, ctrl+b执行编译任务,会选择第一个make

{"version": "2.0.0","tasks": [{"label": "build_suricata","type": "shell","command": "make",  //suricata编译"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"presentation": {"echo": true,"reveal": "always","focus": false,"panel": "dedicated","showReuseMessage": false,"clear": true}},//下面是C++的不予理会{"type": "shell",  //或者是process 区别找文档"label": "C/C++: g++ build active file", //任务标签"command": "/usr/bin/g++","args": ["-g","-Wall","-std=c++17","${fileDirname}/*.cpp","-o","${fileDirname}/${fileBasenameNoExtension}"],"detail": "compiler: /usr/bin/g++","group": {"kind": "build","isDefault": true},"presentation": {"echo": true,"reveal": "always", //是否将集成终端面板置于前面"focus": true, //是否获得焦点"panel": "dedicated","showReuseMessage": false, //控制是否显示“终端将被任务重用,按任意键关闭它”消息"clear": true // 运行前清除终端},"problemMatcher": ["$gcc"]},],"options": {"shell": {"executable": "/bin/bash","args": ["-c"]},"env": {"PATH": "/usr/bin:${env:PATH}"}}
}//官方文档:https://code.visualstudio.com/docs/editor/tasks

launch.json

make 以后不用make install的

make编译之后会在src/.libs/下生成临时的可执行程序, gdb可以调试这个程序,args是执行调试时候加入的参数,--runmode  single是只有一个处理线程的模式,(参照suricata的运行模式,要注意不是任何情况下都有single模式的),这里读入的流量是从pcap文件中拿到的(这个文件是通过wireshark抓包工具得到的),关于这些参数在这里

{"version": "0.2.0","configurations": [{"type": "cppdbg","request": "launch","name": "DeBug_suricata","program": "${workspaceFolder}/src/.libs/suricata",// "program": "/usr/local/bin/suricata",  //make install 后可执行程序的安装位置"args": ["--runmode","single","-r", "/home/daxian/ping.pcap","-vvvv","-c","/home/daxian/Desktop/zs/suricata-6.0.8/suricata.yaml","-l","/home/daxian/Desktop/zs/suricata-log-dir","-S","/home/daxian/Desktop/zs/rules/test.rules","-k","none"// "-i",// "ens33",// "--list-keywords=csv",// "--list-app-layer-protos"],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "/usr/bin/gdb","preLaunchTask": "build_suricata"},//下面是c++的 不予理会{"name": "g++ - Build and debug active file","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "/usr/bin/gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: g++ build active file"},]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK的Dockerfile

openjdk(https://openjdk.org/) 也可以用微软的 https://learn.microsoft.com/zh-cn/java/openjdk/download#openjdk-17 使用debian系统 FROM openjdk:17-slim MAINTAINER xxxENV SCM_PARAMS"" ENV JAVA_OPTS"$JAVA_OPTS -Dspring.profiles.activedev -Djava…

GPT-4o vs. GPT-4 vs. Gemini 1.5 性能评测,谁更胜一筹!

OpenAI 最近推出了 GPT-4o,OpenAI有一次火爆了,其图像、音频、视频的处理能力非常强。 最令人印象深刻的是,它支持用户与 ChatGPT 实时互动,并且能够处理对话中断。 而且,OpenAI 免费开放了 GPT-4o API 的访问权限。…

什么是 浅比较 什么 是 深比较

在编程中,特别是处理对象和数组等复合数据类型时,我们经常需要比较两个数据结构是否相等。浅比较(Shallow Comparison)和深比较(Deep Comparison)是两种常见的比较方法,它们在处理这种比较时有着…

finebi或者finereport发邮件

我们二次开发中,如果想利用产品自带的发邮件的功能,来发送自己的邮件内容。 首先 决策系统中邮件相关信息要配置好之后: 这里配好了发件人,以及默认发件人后, private void sendEmail(String content,String subject)…

云计算如何助力金融科技企业实现高效运营

一、引言 随着信息技术的飞速发展,云计算作为一种新兴的计算模式,正在逐渐改变着传统金融行业的运营模式。金融科技企业作为金融行业的重要组成部分,面临着日益增长的业务需求和技术挑战。在这一背景下,云计算凭借其弹性扩展、高可用性、低成本等优势,成为金融科技企业实…

WebSocket详解与封装工具类

一、前言 在我们了解websocket之前,不妨先想想这几个问题: websocket是什么?websocket有什么好处和特点?为什么要用到websocket?什么情况下会用到websocket? 好了,带着这几个疑问一起来了解一…

163.二叉树:二叉树的最小深度(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

海南省三支一扶报名照上传失败?别忘了这

一、海南三支一扶报名照上传失败的2个原因 1.未按要求使用浏览器:请使用IE浏览器(IE8以上版本)、Chrome(谷歌浏览器)或 Firefox(火狐)浏览器 来使用本系统,360浏览器等其他浏览器请使用极速模式…

C语言编程中的问号:深入解析三元运算符与条件编译

C语言编程中的问号:深入解析三元运算符与条件编译 在C语言编程的广阔天地中,问号(?)这一看似简单的符号,实则蕴含着丰富的内涵和多样的用法。它既可以作为三元运算符的一部分,用于在代码中实现条件判断&a…

数电课设:电动机转速测量控制电路

电动机转速测量控制电路设计 摘要 本文设计的电动机转速测量控制电路通过数字电路核心实现对电机转速的测量和显示。与市面上基于单片机的电机转速测量相比,该电路无需要注重复杂的软件设计,功耗小,稳定性高,实现了更好的底层封装…

C语言编程电子印章:技术与应用的深度探索

C语言编程电子印章:技术与应用的深度探索 在数字化时代,电子印章以其高效、便捷的特性逐渐取代了传统的物理印章。而C语言,作为一种基础且强大的编程语言,为电子印章的开发提供了强大的技术支持。本文将从四个方面、五个方面、六…

如何组织我的 Python 代码

编写代码更像是一门艺术,而不是一门科学。编写精炼、合乎逻辑且强大的工程解决方案对于解决问题非常重要。然而,似乎存在一个重大挑战:让这些解决方案全面且易读。 本文的重点是如何最好地组织 Python 类,使其既可读又整洁。Pyth…

pdf文件太大如何变小,苹果电脑压缩pdf文件大小工具软件

压缩PDF文件是我们在日常办公和学习中经常会遇到的需求。PDF文件由于其跨平台、保持格式不变的特点,被广泛应用于各种场合。然而,有时候我们收到的PDF文件可能过大,不便于传输和存储,这时候就需要对PDF文件进行压缩。下面&#xf…

针对硅基氮化镓高电子迁移率晶体管(GaN-HEMT)的准物理等效电路模型,包含基板中射频漏电流的温度依赖性

来源:Quasi-Physical Equivalent Circuit Model of RF Leakage Current in Substrate Including Temperature Dependence for GaN-HEMT on Si(TMTT 23年) 摘要 该文章提出了一种针对硅基氮化镓高电子迁移率晶体管(GaN-HEMT&…

【Java数据结构】详解LinkedList与链表(四)

🔒文章目录: 1.❤️❤️前言~🥳🎉🎉🎉 2.什么是LinkedList 3.LinkedList的使用 3.1LinkedList的构造方法 3.2LinkedList的其他常用方法介绍 addAll方法 subList方法 LinkedList的常用方法总使…

网络I/O模型

网络I/O模型 同步I/O阻塞I/O非阻塞I/OI/O多路复用select函数接口示例 poll函数接口示例 poll 和 select 的区别epoll原理:示例 Reactor单 Reactor 单进程 / 线程;单 Reactor 多线程 / 进程;多 Reactor 多进程 / 线程; 异步I/O 同步…

歌声合成算法流程和基于lstm的算法实例

歌声合成(Singing Voice Synthesis, SVS)是一项复杂的任务,旨在生成具有自然音质和情感的歌声。实现这种效果的算法通常涉及多个步骤,包括音高预测、音素时长预测、声学特征生成和波形生成等。基于LSTM(Long Short-Term Memory)网络的歌声合成算法是其中一种常见的方法。…

【吊打面试官系列】Java高并发篇 - 什么是自旋 ?

大家好,我是锋哥。今天分享关于 【什么是自旋 ?】面试题,希望对大家有帮助; 什么是自旋 ? 很多 synchronized 里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不…

CCIG学术论坛|文档解析技术加速大模型训练与应用

目录 前言一、大模型训练和应用过程的关键环节面临的问题1、数据2、算力3、语料4、训练时间5、模型规模与复杂度6、部署和推理效率7、安全和隐私 二、高精准、高效率的文档解析三、文档解析技术难点四、TextIn文档解析1、算法Pipeline2、文档图像预处理算法效果3、版面分析算法…

关于单链表——数组

1.单链表统计负数个数 要求实现一个函数,返回带头结点的单链表中负整数的个数。 函数接口定义: int NegativeInt(LinkList L); L是带头结点的单链表的头指针,函数NegativeInt返回L中负整数的个数。如果单链表为空,返回0。 其中Lin…