文章发出去没多久就有一些朋友问我如何解决中文名调试无视断点的问题,我这里说一下,VSC的CC++插件里jdb调试程序本身就是不支持中文名称的,这也没办法,不过大家可以专门创立一个0Debuger.c文件(0是为了让他在最前面显示),程序的调试和改错现在这里搞定,然后ctrl+a+c全选复制,在粘贴过去就OK了。大多数情况写一些小程序用不到断点调试,需要的话几个键复制过去也并不是很麻烦
正文
之前一直深受这个问题困扰,只要路径名称存在中文就会运行报错,显示无法找到目标文件,后来看了好多解答,都说没办法从根本上解决。
既然没有人能解答我,只好自己想办法。然后就想出来办法了
起因是发现按下调试的时候,exe文件可以自动生成,也就是说编译的时候是可以出现中文的,问题出现在运行时,由于默认生成的exe文件是“《原先的源文件名称》. exe”,就是exe中出现中文导致无法调试的
问题就在这里
生成了含有中文路径的exe,用过文本编辑器+DOS命令gcc编译方式的小伙伴肯定都知道,DOS下直接编译.c文件,生成的exe文件名称总是“a.exe”,想到这里我突然就灵光闪现,我们换一种思维,尝试让他生成的exe文件默认名称是一个英文名称
打开vscode(就是VSC的那个工作文件夹)里的task.json,
由于我完全没学过json语言,所以完全是自己摸索,我看到那个注释,以及那个“${file}”,我就猜测他意思可能是源文件的文件名,所以我直接把引号里面“${file}.exe”替换为“a.exe”,当然如果工作区还需要别的文件夹的话就替换成&{fileDirname}\a.exe,结果就是你在调试任何源文件的时候都会生成名为a.exe的程序,如果之前已经生成过了一个a.exe,新生成的a.exe会把原先的覆盖,所以不用担心引起冲突。
这里多说一句,其实这还有一个好处,就是避免你的工作文件夹里有好几个.exe文件,看起来会比较干净,如图,文件里只会有一个.exe
然后我兴冲冲去调试,发现TMD没有把对应的运行程序名也改过来。
所以同理,打开launch.json,在我的几番观察后,我认为那个${fileDirname}应该代表的是工作文件目录的意思,所以我们把这里的"${file}.exe"改成"${fileDirname}a.exe",
更改后:
然后运行我们包含中文名称的源文件:
————————————————
版权