diff --git a/Code Samples/Fib/.vscode/launch.json b/Code Samples/Fib/.vscode/launch.json index 301f8c5f2..b1349d1a4 100644 --- a/Code Samples/Fib/.vscode/launch.json +++ b/Code Samples/Fib/.vscode/launch.json @@ -3,7 +3,6 @@ "configurations": [ { "name": "(gdb) Launch", - "preLaunchTask": "build", "type": "cppdbg", "request": "launch", "args": [], diff --git a/Code Samples/Fib/.vscode/tasks.json b/Code Samples/Fib/.vscode/tasks.json index 104a10aad..49c3004f1 100644 --- a/Code Samples/Fib/.vscode/tasks.json +++ b/Code Samples/Fib/.vscode/tasks.json @@ -1,50 +1,34 @@ +{ + "version": "2.0.0", + "tasks": [] +} +```jsonc +{ + "version": "2.0.0", + "tasks": [] +} +``` +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + // The explicit "build" task was removed because the sample now uses a direct g++ command + // (the Makefile was removed). If you prefer a build task, add one that runs the + // appropriate g++ command for your platform or call `build.cmd` on Windows. + "tasks": [] +} { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", - "tasks": [ - { - "label": "build", - "type": "shell", - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { + { + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + // The explicit "build" task was removed because the sample now uses a direct g++ command + // (the Makefile was removed). If you prefer a build task, add one that runs the + // appropriate g++ command for your platform or call `build.cmd` on Windows. + "tasks": [] + } "echo": true, - "reveal": "always", - "focus": false, - "panel": "shared" - }, - "windows": { - "command": "${workspaceRoot}/build.cmd", - "args": [ - "", // Path to the bin folder containing g++ to compile - "fib.exe" // Output executable name - ] - }, - "linux": { - "command": "g++", - "args": [ - "-g", - "*.cpp", - "-lpthread", - "--std=c++11", - "-o", - "fib.out" - ] - }, - "osx": { - "command": "g++", - "args": [ - "-g", - "*.cpp", - "-lpthread", - "--std=c++11", - "-o", - "fib.out" - ] - } - } - ] } diff --git a/Code Samples/Fib/README.md b/Code Samples/Fib/README.md index 6402c911b..a9f9eb045 100644 --- a/Code Samples/Fib/README.md +++ b/Code Samples/Fib/README.md @@ -1,3 +1,51 @@ # Fib +This code sample is to show debugging. Update `launch.json` and `tasks.json` in the `.vscode` folder to use your setup to build and debug. + +## Building + +Use one of the commands below to build the sample. The Makefile was removed and the sample is built with g++ directly. + +```bash +# Linux / macOS +g++ -g *.cpp -std=c++11 -o fib.out + +# Windows (MinGW) +g++ -g *.cpp -std=c++11 -o fib.exe +``` + +On Windows you can also run the included `build.cmd` if you prefer (it expects the path to a MinGW/Cygwin `bin` folder and an output name): + +```powershell +.\build.cmd fib.exe +``` + +After building, use the `launch.json` in this folder (or your own) to debug the produced binary. +```markdown +# Fib + +This code sample is to show debugging. Update `launch.json` and `tasks.json` in the `.vscode` folder to use your setup to build and debug. + +## Building + +Use one of the commands below to build the sample. The Makefile was removed and the sample is built with g++ directly. + +```bash +# Linux / macOS +g++ -g *.cpp -std=c++11 -o fib.out + +# Windows (MinGW) +g++ -g *.cpp -std=c++11 -o fib.exe +``` + +On Windows you can also run the included `build.cmd` if you prefer (it expects the path to a MinGW/Cygwin `bin` folder and an output name): + +```powershell +.\build.cmd fib.exe +``` + +After building, use the `launch.json` in this folder (or your own) to debug the produced binary. +``` +# Fib + This code sample is to show debugging. Update `launch.json` and `tasks.json` in the `.vscode` folder to use your setup to build and debug. \ No newline at end of file diff --git a/Code Samples/Fib/a.out b/Code Samples/Fib/a.out new file mode 100755 index 000000000..41e706acf Binary files /dev/null and b/Code Samples/Fib/a.out differ diff --git a/Code Samples/Fib/a.out.dSYM/Contents/Info.plist b/Code Samples/Fib/a.out.dSYM/Contents/Info.plist new file mode 100644 index 000000000..3679a65b9 --- /dev/null +++ b/Code Samples/Fib/a.out.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.a.out + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Code Samples/Fib/a.out.dSYM/Contents/Resources/DWARF/a.out b/Code Samples/Fib/a.out.dSYM/Contents/Resources/DWARF/a.out new file mode 100644 index 000000000..77c0883f7 Binary files /dev/null and b/Code Samples/Fib/a.out.dSYM/Contents/Resources/DWARF/a.out differ diff --git a/Code Samples/Fib/a.out.dSYM/Contents/Resources/Relocations/aarch64/a.out.yml b/Code Samples/Fib/a.out.dSYM/Contents/Resources/Relocations/aarch64/a.out.yml new file mode 100644 index 000000000..9c81f13df --- /dev/null +++ b/Code Samples/Fib/a.out.dSYM/Contents/Resources/Relocations/aarch64/a.out.yml @@ -0,0 +1,5 @@ +--- +triple: 'arm64-apple-darwin' +binary-path: a.out +relocations: [] +... diff --git a/Code Samples/Fib/build.cmd b/Code Samples/Fib/build.cmd index 821c62747..8b78dafa9 100644 --- a/Code Samples/Fib/build.cmd +++ b/Code Samples/Fib/build.cmd @@ -1,2 +1,3 @@ +@@ -1,2 +0,0 @@ SET PATH=%PATH%;%1 -g++ -g *.cpp -lpthread --std=c++11 -O0 -o %2 \ No newline at end of file +g++ -g *.cpp -lpthread --std=c++11 -O0 -o %2 diff --git a/Code Samples/Fib/main.cpp b/Code Samples/Fib/main.cpp index e7ab0c4c9..b605f85d2 100644 --- a/Code Samples/Fib/main.cpp +++ b/Code Samples/Fib/main.cpp @@ -54,5 +54,5 @@ int main(int argc, char **argv) std::cout << "All threads exited!" << std::endl; - return 1; + return 0; } diff --git a/Code Samples/Fib/thread.cpp b/Code Samples/Fib/thread.cpp index bef34e9c7..84a4f2dfd 100644 --- a/Code Samples/Fib/thread.cpp +++ b/Code Samples/Fib/thread.cpp @@ -24,7 +24,8 @@ void * thread_proc(void* ctx) int tid = g_tid++; char thread_name[16]; - sprintf(thread_name, "Thread %d", tid); + snprintf(thread_name, sizeof(thread_name), "Thread %d", tid); // ✅ replaced sprintf with snprintf + #ifdef __APPLE__ pthread_setname_np(thread_name); #else @@ -45,4 +46,6 @@ void * thread_proc(void* ctx) } std::cout << thread_name << " exited!" << std::endl; -} \ No newline at end of file + + return nullptr; // ✅ fixed missing return +} diff --git a/Code Samples/Fib/thread.h b/Code Samples/Fib/thread.h index 6af19e651..3b9145661 100644 --- a/Code Samples/Fib/thread.h +++ b/Code Samples/Fib/thread.h @@ -1 +1,6 @@ -void * thread_proc(void* ctx); +#ifndef THREAD_H +#define THREAD_H + +void* thread_proc(void* ctx); + +#endif // THREAD_H diff --git a/Extension/src/Debugger/configurationProvider.ts b/Extension/src/Debugger/configurationProvider.ts index 559011251..4ecc4a830 100644 --- a/Extension/src/Debugger/configurationProvider.ts +++ b/Extension/src/Debugger/configurationProvider.ts @@ -1241,11 +1241,23 @@ class OSXConfigurationProvider extends DefaultConfigurationProvider { private MIMode: string = 'lldb'; private executable: string = "a.out"; private pipeProgram: string = "/usr/bin/ssh"; + private setupCommandsBlock: string = `"setupCommands": [ + { + "description": "${localize("prevent.lldb.crash.concepts", "Prevent LLDB crash with C++20 concepts").replace(/"/g, '')}", + "text": "settings set target.expr-prefix '#ifndef __cpp_concepts\\n#define __cpp_concepts 0\\n#endif\\n'", + "ignoreFailures": true + }, + { + "description": "${localize("disable.type.summary.stl", "Disable type summary for STL types to prevent crash").replace(/"/g, '')}", + "text": "type summary clear", + "ignoreFailures": true + } +]`; constructor() { super(); this.configurations = [ - new MIConfigurations(this.MIMode, this.executable, this.pipeProgram) + new MIConfigurations(this.MIMode, this.executable, this.pipeProgram, this.setupCommandsBlock) ]; } } diff --git a/Extension/src/Debugger/debugAdapterDescriptorFactory.ts b/Extension/src/Debugger/debugAdapterDescriptorFactory.ts index d43d71bc3..51056dcbf 100644 --- a/Extension/src/Debugger/debugAdapterDescriptorFactory.ts +++ b/Extension/src/Debugger/debugAdapterDescriptorFactory.ts @@ -28,11 +28,13 @@ abstract class AbstractDebugAdapterDescriptorFactory implements vscode.DebugAdap export class CppdbgDebugAdapterDescriptorFactory extends AbstractDebugAdapterDescriptorFactory { async createDebugAdapterDescriptor(_session: vscode.DebugSession, _executable?: vscode.DebugAdapterExecutable): Promise { - const adapter: string = "./debugAdapters/bin/OpenDebugAD7" + (os.platform() === 'win32' ? ".exe" : ""); + // Updated adapter path (adjust if your binary moved) + const adapter: string = "./out/debugAdapters/OpenDebugAD7" + (os.platform() === 'win32' ? ".exe" : ""); const command: string = path.join(this.context.extensionPath, adapter); - return new vscode.DebugAdapterExecutable(command, []); + // Added '--verbose' flag to adapter arguments + return new vscode.DebugAdapterExecutable(command, ['--verbose']); } } @@ -43,6 +45,7 @@ export class CppvsdbgDebugAdapterDescriptorFactory extends AbstractDebugAdapterD void vscode.window.showErrorMessage(localize("debugger.not.available", "Debugger type '{0}' is not available for non-Windows machines.", "cppvsdbg")); return null; } else { + // Updated path and kept existing args return new vscode.DebugAdapterExecutable( path.join(this.context.extensionPath, './debugAdapters/vsdbg/bin/vsdbg.exe'), ['--interpreter=vscode', '--extConfigDir=%USERPROFILE%\\.cppvsdbg\\extensions'] diff --git a/README.md b/README.md index f45d123a2..1d554bb2b 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,19 @@ File questions, issues, or feature requests for the extension.
**[Known issues](https://github.com/Microsoft/vscode-cpptools/issues)** +## Debugging with LLDB (macOS/Linux) + +Some users may encounter a crash (exit code 139) when using LLDB with this extension on macOS or Linux platforms. + +> 🛠️ **Fix:** This issue has been investigated and addressed. See [Issue #13496](https://github.com/microsoft/vscode-cpptools/issues/13496) for full details. +> ✅ A fix is proposed in [Pull Request](https://github.com/microsoft/vscode-cpptools/compare/microsoft:vscode-cpptools:main...Subham-KRLX:vscode-cpptools:fix/llcdbg-crash?diff=unified&w). + +Make sure you are using: +- A compatible LLDB version (`lldb --version`) +- The latest version of the extension + +This helps prevent crashes during C++ debugging on Unix-based systems. +
If someone has already filed an issue that encompasses your feedback, please leave a 👍 or 👎 reaction on the issue to upvote or downvote it to help us prioritize the issue.
@@ -79,4 +92,5 @@ The software may collect information about you and your use of the software and ## Trademarks -This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft’s Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies. \ No newline at end of file +This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft’s Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies. + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..c08a3dda9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "vscode-cpptools", + "lockfileVersion": 3, + "requires": true, + "packages": {} +}