Closed fonqL closed 1 year ago
这个你要自己调下插件了,看看 runenvs 里面是否少了部分变量
https://github.com/xmake-io/xmake-vscode/blob/master/assets/target_runenvs.lua
xmake l assets/target_runenvs.lua targetname
https://github.com/xmake-io/xmake-vscode/blob/master/src/xmake.ts#L829-L843
无论是调试插件还是命令行输入,xmake l assets/target_runenvs.lua demo
都输出
[]
__end__
https://github.com/xmake-io/xmake-vscode/blob/3751e4a627bc05d845e5507e3646ec9cbc0fb6e8/assets/target_runenvs.lua#L48
这一行返回两个空map。。所以envs还是空集后面就到print("[]")
了
https://github.com/xmake-io/xmake/blob/1496036a67cf746df72b7140096e08b6913a3d9d/xmake/modules/private/action/run/make_runenvs.lua#L67
target:get("runenvs")
和之后的target:get("runenvs")
都返回空。。
在target_runenvs.lua打印了一下target ( print(target)
)
target.txt
target:get似乎只在第3669行的_INFO = {...}执行查找,比如target:get("packages"), target:get("warnings")是有结果的
怎么给xmake debug。。本地没找到main.lua,是二进制分发吗(用apt+ppa装的)
xmake l os.programdir 看下本地安装目录,有所有 lua 脚本
或者拉源码,切本地调试环境,
cd xmakesrc
git submodule update --init
make
source ./scripts/srcenv.profile
https://github.com/xmake-io/xmake/blob/1496036a67cf746df72b7140096e08b6913a3d9d/xmake/actions/run/main.lua#L120-L156 在main.lua中,执行流程是:先get环境变量,再加入LD_LIBRARY_PATH,再执行代码,最后恢复旧的环境变量
而在target_runenvs.lua中,执行流程是:先get环境变量,再加入LD_LIBRARY_PATH,然后就恢复旧的环境变量,最后开启调试运行代码,没有环境变量LD_LIBRARY_PATH
新出现一个最新1.7.7vscode 插件更新的问题(之前拉的1.7.6源码调试没问题)
点击下方状态栏的run按钮会自动重新构建,然而我只是想要运行
新出现一个最新1.7.7vscode 插件更新的问题(之前拉的1.7.6源码调试没问题)
点击下方状态栏的run按钮会自动重新构建,然而我只是想要运行
那到底要怎么搞,也是蛋疼。。https://github.com/xmake-io/xmake-vscode/discussions/142
@owwkmidream
点击下方状态栏的run按钮会自动重新构建,然而我只是想要运行
不会 rebuild,只是 增量 build,如果之前编译过,不会去编译任何文件,只是显示个 build string
那好像也不是不行。。之后有好的想法再提feature request吧。。
https://github.com/xmake-io/xmake/blob/1496036a67cf746df72b7140096e08b6913a3d9d/xmake/actions/run/main.lua#L120-L156 在main.lua中,执行流程是:先get环境变量,再加入LD_LIBRARY_PATH,再执行代码,最后恢复旧的环境变量
而在target_runenvs.lua中,执行流程是:先get环境变量,再加入LD_LIBRARY_PATH,然后就恢复旧的环境变量,最后开启调试运行代码,没有环境变量LD_LIBRARY_PATH
跟恢复没关系,那个脚本只是为了 print envs 结果出来,恢复前,envs 已经取出来了
之后调试,会把envs 直接透传给 debugger,跟当前环境是否有 LD_LIBRARY_PATH 没任何关系。
只要确认 print 出有结果,不是空的就行,如果是空的,也跟这个恢复没啥问题,应该是其他问题
build run 那个我改进了下,具体看 https://github.com/xmake-io/xmake-vscode/discussions/142#discussioncomment-3760924
跟恢复没关系,那个脚本只是为了 print envs 结果出来,恢复前,envs 已经取出来了
但就是没取出来啊 见我上面的评论 https://github.com/xmake-io/xmake-vscode/issues/139#issuecomment-1261706610
没取出来也跟恢复envs没啥关系,是其他问题导致,得继续跟进去
如果是空的,也跟这个恢复没啥问题,应该是其他问题
那问题出在哪呢,是make_runenvs还是target的生成呢 https://github.com/xmake-io/xmake-vscode/blob/a592193f985d6b3e5296755e9d6f2ce77c16e3f8/assets/target_runenvs.lua#L31
或者说空是正常情况?? 来点pre-condition或post-condition?
改了下,再试试
。。原来问题是codelldb插件的“type”: "lldb"调试配置根本不接受environment属性。。在launch.json中写出来检查发现报黄了。。按左侧调试栏的按钮果然也显示找不到共享库路径。。 我知道的一个解法是改成
"env": {
"LD_LIBRARY_PATH": "/home/fofo/.xmake/packages/l/liburing/2.1/2e6104ac1acb47ddb318f33dd2d128ee/lib",
},
可能是个breaking change,不知道有没有其他指定共享库路径的方法
另外一个work around就是改成用"type": "cppdbg"调试
cppdbg 和 codelldb 的 env 配置格式不同?
而且改了后type: lldb确实可以成功调试
这里又说 env {}
反而不行
这个有官方文档么,envs 配置不是应该统一的么,为啥 lldb 和 cpptools 的 key 和格式还不同?
。。我觉得vscode的调试就是以type为依据分发给相应的调试插件处理的吧,不同插件处理的属性就不一样 估计要去找插件的官方文档吧我猜 确实有些混乱了
codelldb的文档: https://github.com/vadimcn/vscode-lldb/blob/master/MANUAL.md#launching-a-new-process 里面就说用env而不是environment
今天没空搞了,你可以直接提个 pr 过来帮忙搞下。
这里转下 targetRunEnvs 传入 env 就行了。 https://github.com/xmake-io/xmake-vscode/blob/c3195efcdba08a48ac5deefac7df32393ce117c5/src/debugger.ts#L82-L93
改进过了 再试下
已解决
Xmake 版本
2.7.1
操作系统版本和架构
Ubuntu 22.04 on Win10 WSL
描述问题
xmake.lua
main.cpp
可以运行,可以命令行调试(xmake run -d),但是不能在vscode里调试(即点击状态栏调试按钮或按F5)
相关:
settings.json
期待的结果
可以调试
工程配置
No response
附加信息和错误日志
No response