System details
-
操作系统和版本:macOS high sierra 10.13.4
-
VS代码版本:1.25.1
-
C / C扩展版本:0.17.7
-
已安装其他扩展程序
-
bazel:0.10.0-homebrew
-
lldb:lldb-902.0.79.2
-
gdb:GNU gdb(GDB)8.0.1
BUG description
我使用bazel来构建一个教程C项目 . 源代码非常简单如下:
#include <iostream>
#include <string>
using namespace std;
void greet(const string& person) {
cout << "Hello, " << person << "!" << endl;
}
int main(int argc, char** argv) {
if(argc >= 2) {
greet(argv[1]);
} else {
int x = 0;
int y = 0;
int c;
c = x * y;
cerr << "insufficient args, usage: " << argv[0] << " personNameHere" << endl;
}
return 0;
}
我有一个像这样的task.json来运行bazel build:
{
"version": "2.0.0",
"tasks": [
{
"label": "debuggable-build",
"type": "shell",
"command": "cd ${workspaceFolder}/hello && bazel build -c dbg --strip=never //hello:main",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
它适用于生成 ${workspaceFolder}/bazel-out/darwin-dbg/bin/hello/main
中的runnable main.o
然后我在vs代码中使用lldb进行调试 . 假设我在第11行设置了调试标志,如 int main(int argc, char** argv) {
我的launch.json描述如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bazel-out/darwin-dbg/bin/hello/main",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb"
}
]
}
然后我按下调试面板中的调试按钮 . 但是,它永远不会在第11行停止 . 所有的调试标签都会变成灰色,并告诉我:当我将鼠标悬停在它上面时,“未经检查的断点” .
vs代码终端输出结束如下:
Loaded '/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib'. Symbols loaded.
Loaded '/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib'. Symbols loaded.
Loaded '/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib'. Symbols loaded.
Loaded '/usr/lib/libcups.2.dylib'. Symbols loaded.
Loaded '/System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos'. Symbols loaded.
Loaded '/System/Library/Frameworks/GSS.framework/Versions/A/GSS'. Symbols loaded.
Loaded '/usr/lib/libresolv.9.dylib'. Symbols loaded.
Loaded '/usr/lib/libiconv.2.dylib'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal'. Symbols loaded.
Loaded '/usr/lib/libheimdal-asn1.dylib'. Symbols loaded.
Loaded '/System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth'. Symbols loaded.
Loaded '/System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory'. Symbols loaded.
Loaded '/System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS'. Symbols loaded.
Loaded '/usr/lib/libutil.dylib'. Symbols loaded.
Loaded '/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio'. Symbols loaded.
Loaded '/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData'. Symbols loaded.
Loaded '/usr/lib/libmarisa.dylib'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon'. Symbols loaded.
Loaded '/usr/lib/libChineseTokenizer.dylib'. Symbols loaded.
Loaded '/usr/lib/libcmph.dylib'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling'. Symbols loaded.
locations added to breakpoint 1
Loaded '/System/Library/Frameworks/CoreData.framework/Versions/A/CoreData'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji'. Symbols loaded.
Loaded '/System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement'. Symbols loaded.
Loaded '/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement'. Symbols loaded.
Loaded '/usr/lib/libxslt.1.dylib'. Symbols loaded.
Loaded '/Users/shihuashen/x-mesh/example/bazel-out/darwin-dbg/bin/hello/main'. Symbols loaded.
Loaded '/System/Library/CoreServices/Encodings/libSimplifiedChineseConverter.dylib'. Symbols loaded.
The program '/Users/shihuashen/x-mesh/example/bazel-out/darwin-dbg/bin/hello/main' has exited with code 0 (0x00000000).
在由vs代码启动的运行终端中,似乎程序运行良好并且没有任何中断结束:
Launching: '/Users/shihuashen/x-mesh/example/bazel-out/darwin-dbg/bin/hello/main'
Working directory: '/Users/shihuashen/x-mesh/example'
1 arguments:
argv[0] = '/Users/shihuashen/x-mesh/example/bazel-out/darwin-dbg/bin/hello/main'
insufficient args, usage: /Users/shihuashen/x-mesh/example/bazel-out/darwin-dbg/bin/hello/main personNameHere
Process exited with status 0
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
我注意到bazel需要设置build -c dbg --strip = never以支持调试,就像我一样 . 同时,我试图在终端运行lldb,看起来效果很好 . 输出如下:
shihuashendeMacBook-Pro:hello shihuashen$ lldb main
(lldb) target create "main"
Current executable set to 'main' (x86_64).
(lldb) breakpoint set -n main
Breakpoint 1: 14 locations.
(lldb) r
Process 21174 launched: '/Users/shihuashen/x-mesh/example/bazel-out/darwin-dbg/bin/hello/main' (x86_64)
4 locations added to breakpoint 1
Process 21174 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100002120 main`main
main`main:
-> 0x100002120 <+0>: pushq %rbp
0x100002121 <+1>: movq %rsp, %rbp
0x100002124 <+4>: subq $0xc0, %rsp
0x10000212b <+11>: movl $0x0, -0x5c(%rbp)
Target 0: (main) stopped.
(lldb) n
Process 21174 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = instruction step over
frame #0: 0x0000000100002121 main`main + 1
main`main:
-> 0x100002121 <+1>: movq %rsp, %rbp
0x100002124 <+4>: subq $0xc0, %rsp
0x10000212b <+11>: movl $0x0, -0x5c(%rbp)
0x100002132 <+18>: movl %edi, -0x60(%rbp)
Target 0: (main) stopped.
(lldb) n
我是否犯了一些错误或滥用了bazel或vs代码?或者任何人都可以在vscode中提供配置json,它可以调试bazel项目?很高兴听到专业人士的任何建议和评论 .