LuaPanda icon indicating copy to clipboard operation
LuaPanda copied to clipboard

remote调试时 存在F10 step异常跳出函数问题

Open liaoyudong2 opened this issue 4 years ago • 6 comments

3.1.0版本中 通过启动端口 远程调试时出现了F10逐步调试过程中直接跳出了函数的问题 环境是: ubuntu20.04 lts 内核5.4.0-44-generic vscode1.48.1 libpdebug是自行在ubuntu下进行编译的so(不知道这是否有影响)

liaoyudong2 avatar Aug 24 '20 04:08 liaoyudong2

目前遇到的问题是:希望做单步运行,但是变成了跳出(step out)对么 因为我们自己的开发环境主要是游戏客户端,之前没有测试过在 linux 下 libpdebug 的运行状态,这里我建议先做以下尝试

  1. 在会被跳过的位置打一个断点,看单步时是否会在断点停止。如果是,那么可能是调试器状态机的问题

  2. 无论第一步结果如何,再做一个测试,停在任意断点处时,在调试控制台输入 LuaPanda.getInfo() 看下返回信息 image 看其中的libpdebug库是否被正确加载,如果libpdebug库已加载,设置一下 launch.json 中的 useChook : false 暂时不使用libpdebug库,看单纯使用lua库是否还有这个问题

stuartwang avatar Aug 26 '20 04:08 stuartwang

针对回复1: 在被跳过的地方下方再多打几个断点是可以正常命中 有时候是会突然提前跳出函数(在F10逐步过程中) 针对回复2: 2020-08-26_15-25 libpdebug是成功加载的

目前尝试下关闭chook看看

liaoyudong2 avatar Aug 26 '20 07:08 liaoyudong2

好的,期待关闭chook的结果。

关于使用chook时有跳步的问题,我猜测可能是因为切换hook状态导致的:为了提升调试器的运行效率,每次hook函数执行完都会进入下面函数重新检查一下状态,不知道是不是这里状态设置错误导致的。

image

可以把这个函数改成如下,就是不再检查状态了 , 可以试一下这样能否解决问题

void check_hook_state(lua_State *L, const char* source ,  int current_line, int def_line, int last_line ,int event){
    if (source == NULL) {
        return;
    }
    if(cur_run_state == RUN && cur_hook_state != DISCONNECT_HOOK){
        sethookstate(L, ALL_HOOK);
    }
}

stuartwang avatar Aug 27 '20 06:08 stuartwang

使用check_hook_state新代码重新编译so后 百分百step out 出来 只要下方没有断点 必定跳出. 下方设置断点后 F10效果等于F5 跳跃到下一个断点了.. chook=false的话目前没发现什么特别问题

liaoyudong2 avatar Aug 27 '20 08:08 liaoyudong2

chook=false 正常的话,如果性能可以满足,建议暂时这样用。 我觉得应该还是 check_hook_state 有问题。最近有点忙,本周末或者下周有空的时候我自测一下,有修改建议再回复哈

stuartwang avatar Aug 31 '20 02:08 stuartwang

好的 目前false一切正常 性能也挺好的 好评!

liaoyudong2 avatar Aug 31 '20 02:08 liaoyudong2