chromium macos vscode

发布时间 2024-01-03 11:57:50作者: 冰糖葫芦很乖

https://chromium.googlesource.com/chromium/src/+/105.0.5195.127/tools/vscode

https://source.chromium.org/chromium/chromium/src/+/main:tools/vscode/

一直以来都很少用vscode

了解下这几个配置的意思

 

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Chrome Debug",
      "type": "cppdbg", // "cppdbg" for GDB/LLDB, "cppvsdbg" for Windows Visual Studio debugger
      "request": "launch",
      "targetArchitecture": "x64", //targetArchitecture 被设置为 "x64" 或 "arm"。这表示相应的调试会话将用于调试 x86-64 架构(64 位)或 ARM 架构的目标程序。具体的架构值取决于目标平台和架构。
      "program": "${workspaceRoot}/out/Debug/chrome",
      "args": [], // Optional command line args
      "preLaunchTask": "8-build_chrome_debug", //preLaunchTask 有助于在启动调试之前自动执行构建任务,以确保调试器使用的是最新的可执行文件。这对于避免手动构建代码并确保调试环境的一致性非常有帮助。
      "stopAtEntry": false, // false 是调试配置中的一个属性设置,表示在启动调试会话时是否在程序的入口处停止执行。如果设置为 true,则在程序启动时会立即停止,等待用户手动触发单步执行或其他调试操作。
      "cwd": "${workspaceRoot}/out/Debug/", //当前工作目录
      "environment": [], //"environment" 是调试配置中的一个属性,用于设置调试器执行时的环境变量。
      "externalConsole": true, //"externalConsole" 是调试配置中的一个属性,用于指定在启动调试时是否使用外部控制台。在给定的 JSON 配置中,"externalConsole": true 表示启动调试时会使用外部控制台。
      "setupCommands": [ //"setupCommands" 是调试配置中的一个属性,用于指定在启动调试器之前要执行的设置命令。这些命令通常是针对特定的调试器,用于配置调试器的行为或加载特定的调试脚本。
        {
          "description": "Enable pretty printing for gdb",
          "text": "-enable-pretty-printing"
        },
        {
          "description": "Load Chromium gdb configuration",
          "text": "-interpreter-exec console \"source -v ${workspaceRoot}/tools/gdb/gdbinit\""
        },
        {
          "description": "Load Blink gdb configuration",
          "text": "-interpreter-exec console \"python import sys; sys.path.insert(0, '${workspaceRoot}/third_party/blink/tools/gdb'); import blink\""
        }
      ]
    },
//"setupCommands" 包含了三个命令,分别用于启用 GDB 的漂亮打印、加载 Chromium 的 GDB 配置以及加载 Blink 的 GDB 配置。这些命令在启动调试器之前被执行,以确保调试器以正确的方式配置和加载必要的调试脚本。这对于特定项目或框架的调试器配置非常有用。 {
"name": "Chrome Release", "type": "cppdbg", // "cppdbg" for GDB/LLDB, "cppvsdbg" for Windows Visual Studio debugger "request": "launch", "targetArchitecture": "x64", "program": "${workspaceRoot}/out/Release/chrome", "args": [], // Optional command line args "preLaunchTask": "9-build_chrome_release", "stopAtEntry": false, "cwd": "${workspaceRoot}/out/Release/", "environment": [], "externalConsole": true }, { "name": "Custom Test Debug", "type": "cppdbg", // "cppdbg" for GDB/LLDB, "cppvsdbg" for Windows Visual Studio debugger "request": "launch", "targetArchitecture": "x64", "program": "${workspaceRoot}/out/Debug/unit_tests", "args": [ "--gtest_filter=*", "--single-process-tests", "--ui-test-action-max-timeout=1000000", "--test-launcher-timeout=1000000" ], "preLaunchTask": "10-build_test_debug", "stopAtEntry": false, "cwd": "${workspaceRoot}/out/Debug/", "environment": [], "externalConsole": true }, { "name": "Attach Debug", "type": "cppdbg", // "cppdbg" for GDB/LLDB, "cppvsdbg" for Windows Visual Studio debugger "request": "launch", "targetArchitecture": "x64", "program": "${workspaceRoot}/out/Debug/chrome", "args": [ "--remote-debugging-port=2224" ], "stopAtEntry": false, "cwd": "${workspaceRoot}/out/Debug/", "environment": [], "externalConsole": false }, { // Must be running before launching: out/Debug/bin/chrome_public_apk gdb --ide "name": "Attach Android", "type": "cppdbg", // "cppdbg" for GDB/LLDB, "cppvsdbg" for Windows Visual Studio debugger "request": "launch", "targetArchitecture": "arm", "program": "/tmp/adb-gdb-support-${env:USER}/app_process", "miDebuggerPath": "/tmp/adb-gdb-support-${env:USER}/gdb", "miDebuggerServerAddress": "ignored", "cwd": "${workspaceRoot}", "customLaunchSetupCommands": [ { "text": "-interpreter-exec console \"source -v /tmp/adb-gdb-support-${env:USER}/gdbinit\"" } ], "launchCompleteCommand": "None", } ] }

 

settings.js{  // Suggested vscode default settings for simplifying initial setup. These

// settings are hoped to be convenient and helpful for those beginning to use
  // vscode with Chrome. Please modify and change as necessary.
  // All settings are optional, but some more "optional" settings at the end
  // are disabled by default. Feel free to enable them.
  // Default tab size of 2, for consistency with internal codebase.
  "editor.tabSize": 2, // 默认制表符大小为2,以与内部代码库一致。
  // Do not figure out tab size from opening a file.
  "editor.detectIndentation": false, // 不要从打开文件中推断制表符大小。
  // Add a line at 80 characters. 
  "editor.rulers": [80], // 在80个字符处添加一条竖线。
  // Forces LF instead of "auto" which uses CRLF on Windows.
  "files.eol": "\n", // 强制使用 LF 而不是 "auto",在 Windows 上使用 CRLF。
  // Trim tailing whitespace on save.
  "files.trimTrailingWhitespace": true, // 保存时去除尾随空格。
  // Insert trimmed final new line.
  "files.insertFinalNewline": true, // 插入去除的最终换行符。
  "files.trimFinalNewlines": true,
  "files.associations": {
    // Adds xml syntax highlighting for grd files.
    "*.grd" : "xml", // 为 grd 文件添加 XML 语法高亮。
    // Optional: .gn and .gni are not JavaScript, but at least it gives some
    // approximate syntax highlighting. Ignore the linter warnings!
    // There's an extension for these files, excluding the linter headaches.
    // https://marketplace.visualstudio.com/items?itemName=npclaudiu.vscode-gn
    "*.gni" : "javascript",
    "*.gn" : "javascript"
  },
  "files.exclude": {
    // Ignore build output folders.
    "out*/**": true // 忽略构建输出文件夹。
  },
  "files.watcherExclude": {
    // Don't watch out*/ and third_party/ for changes to fix an issue
    // where vscode doesn't notice that files have changed.
    // https://github.com/Microsoft/vscode/issues/3998
    // There is currently another issue that requires a leading **/ for
    // watcherExlude. Beware that this pattern might affect other out* folders
    // like src/cc/output/.
    "**/out*/**": true,
    "**/third_party/**": true
// 不要监视 out*/ 和 third_party/ 的更改,以解决一个问题, // 即 VSCode 不会注意到文件已更改的问题。 // https://github.com/Microsoft/vscode/issues/3998 // 目前存在另一个问题,需要一个前导 **/ 用于 watcherExclude。注意,这个模式可能影响其他 out* 文件夹,比如 src/cc/output/。
}, // Wider author column for annotator extension. // https://marketplace.visualstudio.com/items?itemName=ryu1kn.annotator "annotator.annotationColumnWidth": "24em", // Annotator 扩展的宽作者列。 // C++ clang format settings. |workspaceFolder| is assumed to be Chromium's // src/ directory. "C_Cpp.clang_format_path": "${workspaceFolder}/third_party/depot_tools/clang-format", // C++ clang 格式设置。假设 |workspaceFolder| 是 Chromium 的 src/ 目录。 "C_Cpp.clang_format_sortIncludes": true, "editor.formatOnSave": true, "editor.formatOnSaveMode": "modifications", // Optional: Highlight current line at the left of the editor. // "editor.renderLineHighlight": "gutter", // Optional: Don't automatically add closing brackets. It gets in the way. // "editor.autoClosingBrackets": "never", // Optional: Enable a tiny 30k feet view of your doc. // "editor.minimap.enabled": true, // "editor.minimap.maxColumn": 80, // "editor.minimap.renderCharacters": false, // Optional: Don't continuously fetch remote changes. //"git.autofetch": false, // Optional: Do not open files in 'preview' mode. Opening a new file in can // replace an existing one in preview mode, which can be confusing. //"workbench.editor.enablePreview": false, // Optional: Same for files opened from quick open (Ctrl+P). //"workbench.editor.enablePreviewFromQuickOpen": false, }

 

tasks.json

{
  // Note!
  // Set the value used for ${config:chrome.outputDir} in your settings.json
  // file with a line like:
  //   "chrome.outputDir": "/path/to/chromium/src/out/current_link",
  // Then run "0-set_chrome_output_directory" to set the `current_link`
// 注意!
// 使用类似以下行的 "settings.json" 文件中的 ${config:chrome.outputDir} 值设置
// "chrome.outputDir": "/path/to/chromium/src/out/current_link",
// 然后运行 "0-set_chrome_output_directory" 来设置 `current_link`
// symbolic link (see below). "version": "2.0.0", "runner": "terminal", // The default problem matcher matches build output, which is useful for most tasks. "problemMatcher": [ // Matches output from clang. { "owner": "cpp", "fileLocation": ["relative", "${config:chrome.outputDir}"], "pattern": { "regexp": "^(gen/.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } }, { "owner": "cpp", "fileLocation": ["relative", "${workspaceRoot}"], "pattern": { "regexp": "^../../(.*):(\\d+):(\\d+):\\s+(warning|\\w*\\s?error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } }, // Matches output from clang-cl / msvc. { "owner": "cpp", "fileLocation": [ "relative", "${config:chrome.outputDir}" ], "pattern": { "regexp": "^(gen/.*)\\((\\d+),(\\d+)\\):\\s+(warning|\\w*\\s?error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } }, { "owner": "cpp", "fileLocation": [ "relative", "${workspaceRoot}" ], "pattern": { "regexp": "^../../(.*)\\((\\d+),(\\d+)\\):\\s+(warning|\\w*\\s?error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } }, { "owner": "cpp", "fileLocation": ["relative", "${config:chrome.outputDir}"], "pattern": { "regexp": "^(gen/.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$", "file": 1, "severity": 3, "message": 4 } }, { "owner": "cpp", "fileLocation": ["relative", "${workspaceRoot}"], "pattern": { "regexp": "^../../(.*?):(.*):\\s+(warning|\\w*\\s?error):\\s+(.*)$", "file": 1, "severity": 3, "message": 4 } } ], "options": { // It's important to set the CWD to the output directory so that file paths // are linked correctly in the terminal output. "cwd": "${config:chrome.outputDir}" }, "inputs": [ { // See 'Set Chrome Output Directory'. "type": "pickString", "id": "chromeOutputDir", "description": "Chrome output directory:", // Configure this to point to all the output directories you use. "options": [ "/path/to/chromium/src/out/pc", "/path/to/chromium/src/out/Debug", "/path/to/chromium/src/out/Debug_x86" ] }, { "type": "promptString", "id": "gtestFilter", "description": "Filter for 4-test_current_file_with_filter", "default": "*" } ], "tasks": [ // Set the Chrome output directory to be used in future task runs. // This uses a symbolic link to remember the current output directory. // If you want to use this, make sure chrome.outputDir is configured to // point to the link created at ${workspaceFolder}/out/current_link. // Alternatively: // * If you want to be prompted for the output directory each // time you run a command, replace // ${config:chrome.outputDir} // with // ${input:chromeOutputDir} // everywhere in this file. // // * If you want to have different tasks for different output directories, // just create duplicate tasks and hard-code the output directory used. { "label": "0-set_chrome_output_directory", "command": "rm -f ${workspaceFolder}/out/current_link; ln -s ${input:chromeOutputDir} ${workspaceFolder}/out/current_link", "type": "shell", // The default problem matcher doesn't make sense here, so remove it. "problemMatcher": [], "options": { "cwd": "${workspaceFolder}" } }, // Some general-purpose build and test tasks. These all inherit the // problemMatcher at the top of the file. { "label": "1-build_chrome", "type": "shell", "command": "autoninja -C ${config:chrome.outputDir} chrome", "group": "test" }, { "label": "2-build_all", "type": "shell", "command": "autoninja -C ${config:chrome.outputDir}" }, { "label": "3-test_current_file", "type": "shell", "command": "${workspaceFolder}/tools/autotest.py -C ${config:chrome.outputDir} --run-all ${file}" }, { "label": "4-test_current_file_with_filter", "type": "shell", "command": "${workspaceFolder}/tools/autotest.py -C ${config:chrome.outputDir} --gtest_filter ${input:gtestFilter} ${file}" }, { "label": "5-test_current_line", "type": "shell", "command": "${workspaceFolder}/tools/autotest.py -C ${config:chrome.outputDir} --line ${lineNumber} ${file}" }, { "label": "6-test_current_directory", "type": "shell", "command": "${workspaceFolder}/tools/autotest.py -C ${config:chrome.outputDir} --run-all ${fileDirname}" }, { "label": "7-build_current_file", "type": "shell", "command": "compile_single_file --build-dir=${config:chrome.outputDir} --file-path=${file}" }, // Some more specific build tasks, which hard-code the output directory. { "label": "8-build_chrome_debug", "type": "shell", "command": "autoninja -C ${workspaceFolder}/out/Debug chrome" }, { "label": "9-build_chrome_release", "type": "shell", "command": "autoninja -C ${workspaceFolder}/out/Release chrome" }, { "label": "10-build_test_debug", "type": "shell", "command": "autoninja -C ${workspaceFolder}/out/Debug unit_tests components_unittests browser_tests" }, { "label": "11-generate_compile_commands", "type": "shell", "command": "${workspaceFolder}/tools/clang/scripts/generate_compdb.py -p ${config:chrome.outputDir} > ${workspaceFolder}/compile_commands.json" } ] }
  • version: 配置文件版本。
  • runner: 指定任务运行器为终端。
  • problemMatcher: 用于匹配构建输出中的警告和错误。
  • options: 一些通用选项,例如将当前工作目录设置为输出目录。
  • inputs: 用户输入配置,用于在运行任务时提供值。
  • tasks: 具体的任务配置,包括构建、测试等。