测试代码参照GDB用法(二)
可以将命令历史保存到文件中
能使用历史处理命令对历史数据进行处理, 暂不细究
等关闭的时候就会保存到history save中的文件夹中
默认条数256
默认是当前目录下的.gdb_history文件中
关闭gdb, 保存到文件中
存的是最后十条命令记录
p "自动 gdbinit 初始化完成!"
只能叫.gdbinit, 且目录位置要对
source 目录/文件 // 用linux命令读取文件内容
文件名都不需要是.gdbinit
p "手动加载 testinit文件成功"
之前gdb设置的一些参数, 退出gdb后再进入配置就不生效了, 写入初始化文件则会一直生效
define 命令名
命令
…
end
documnt 命令名
说明
end
help 命令 // 显示说明
stl中pvector的自定义
define pvector
if $argc == 0
help pvector
else
set $size = $arg0._M_impl._M_finish - $arg0._M_impl._M_start
set $capacity = $arg0._M_impl._M_end_of_storage - $arg0._M_impl._M_start
set $size_max = $size - 1
end
if $argc == 1
set $i = 0
while $i < $size
printf "elem[%u]: ", $i
p *($arg0._M_impl._M_start + $i)
set $i++
end
end
if $argc == 2
set $idx = $arg1
if $idx < 0 || $idx > $size_max
printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max
else
printf "elem[%u]: ", $idx
p *($arg0._M_impl._M_start + $idx)
end
end
if $argc == 3
set $start_idx = $arg1
set $stop_idx = $arg2
if $start_idx > $stop_idx
set $tmp_idx = $start_idx
set $start_idx = $stop_idx
set $stop_idx = $tmp_idx
end
if $start_idx < 0 || $stop_idx < 0 || $start_idx > $size_max || $stop_idx > $size_max
printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max
else
set $i = $start_idx
while $i <= $stop_idx
printf "elem[%u]: ", $i
p *($arg0._M_impl._M_start + $i)
set $i++
end
end
end
if $argc > 0
printf "Vector size = %u\n", $size
printf "Vector capacity = %u\n", $capacity
printf "Element "
whatis $arg0._M_impl._M_start
end
end
document pvector
Prints std::vector<T> information.
Syntax: pvector <vector> <idx1> <idx2>
Note: idx, idx1 and idx2 must be in acceptable range [0..<vector>.size()-1].
Examples:
pvector v - Prints vector content, size, capacity and T typedef
pvector v 0 - Prints element[idx] from vector
pvector v 1 2 - Prints elements in range [idx1..idx2] from vector
end
#include
#include
using namespace std;
int main(int argc,char *argv[])
{
cout << "参数个数:" << argc << endl;
for(int i = 0; i < argc; i++)
{
cout << "参数[" << i << "]:" << argv[i] << endl;
}
vector<int> v = {1, 3};
return 0;
}
#ifndef _PFUN_H_
#define _PFUN_H_
#include
#include
void pvector_self(const std::vector<int> v);
#endif
#include "pFun.h"
void pvector_self(const std::vector<int> v)
{
if(v.empty())
{
std::cout << "为空" << std::endl;
}
for(int i = 0; i < v.size(); i++)
{
std::cout << "num" << i << ": " << v[i];
if(i != v.size() - 1)
{
std::cout << std::endl;
}
}
std::cout << std::endl;
std::cout << "vector 读取完毕" << std::endl;
}
cmake_minimum_required(VERSION 3.10)
AUX_SOURCE_DIRECTORY(. FUNCTIONS_SOURCE)
add_library(Functions SHARED ${FUNCTIONS_SOURCE})
cmake_minimum_required(VERSION 3.10)
project(main)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall")
INCLUDE_DIRECTORIES(./)
AUX_SOURCE_DIRECTORY(./ MAIN)
add_subdirectory(Functions)
add_executable(main ${MAIN})
target_include_directories(main PUBLIC Functions)
target_link_libraries(main Functions)
p "手动加载 testinit文件成功"
set $pvector_self = pvector_self
Functions/CMakeLists.txt 会生成 libFunctions.so, gdb就要调用这个函数的输出方法, 输出vector
编译生成libFunctions.so和main