cgo 调试c++库

在golang中,我们使用cgo可以调用c++库,但是调用的库怎么调试是个问题

以windows为例,golang环境使用gcc 5.3 win64编译,所有的库也使用相同编译器编译

待调试的库添加-ggdb -O0参数

整个go程序调试的话可以使用go build编译出执行程序再gdb,但是单个单元测试模块调试的化就需要使用dlv进行debug.test编译,编译命令:

dlv.exe test 模块路径 -- -test.run 用例名称

产生debug.test文件,但是存在一个问题,当dlv退出的时候生成的文件会被删除,所以此时需要杀死dlv进程保留文件,再进行gdb调试

编译过程写了一个批处理:

@echo off

set nowpath=%CD%
set curpath=
set start=0
set target=debug.test

if "%1" == "" ( goto :getmodel ) else (
	set curpath=%1
	goto :buildtest
)

:getmodel
for /f "tokens=1* delims=\" %%a in ("%nowpath%") do (
	if "%%a" == "src" (
		set start=1
	)
	if "%start%" == "1" (
		if "%curpath%" == "" (
			set curpath=%%a
		) else (
			set curpath=%curpath%\%%a
		)
	)
	set nowpath=%%b
)
if defined nowpath ( goto :getmodel )


:buildtest
del /f /s %target%
echo "input test name"
set /p testname=
if "%testname%" == "" (
	goto :end
) else (
	::start dlv.exe test %curpath% --headless=true --listen=127.0.0.1:11890 -- -test.run %testname%
	start /min dlv.exe test %curpath% -- -test.run %testname%
	for /l %%i in (1,1,100) do (
		if exist %target% (
			taskkill /f /t /im dlv.exe
			goto :end
		) else (
			ping 127.0.0.1 -n 6 > nul
		)
	)
)


:end

使用vscode 进行c++调试,需配置launch.json

{
        "version": "0.2.0",
        "configurations": [
            {
                "name": "(gdb) Launch",
                "type": "cppdbg",
                "request": "launch",
                "program": "src/xxxx/cccc/services/debug.test",
                "args": [],
                "stopAtEntry": false,
                "cwd": "src/xxxx/cccc/services",
                "environment": [],
                "externalConsole": true,
                "MIMode": "gdb",
                "miDebuggerPath": "D:/GNU/mingw64/bin/gdb.exe",
                "setupCommands": [
                    {
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ]
            }
        ]
    }

设置program,cwd,miDebuggerPath路径,f5就可以不使用可怜的gdb控制台

转载于:https://my.oschina.net/u/659405/blog/1549184

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值