有没有办法在 Visual Studio Code 中使用集成终端来调试/启动代码而不是调试控制台?
目前,我正在使用外部控制台窗口在 VSCode 中调试代码,但是在全屏调试时因为它进入后台所以不是很方便。调试控制台的问题在于它不允许输入,所以如果我的程序需要任何输入并且我不使用外部控制台,它就会卡住。
或者,有没有办法将输入输入调试控制台?
编辑:我正在尝试使用 Microsoft 的 C++ 插件调试 C++ 代码。这是我的launch.json
:
{
"name": "Debug",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/Debug/HelloWorld.exe",
"args": [],
"preLaunchTask": "Build",
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "integratedTerminal"
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读类型别名规则,但无法确定此代码中是否包含 UB:
std::vector<std::byte> vec = {std::byte{'a'}, std::byte{'b'}};
auto sv = std::string_view(reinterpret_cast<char*>(vec.data()), vec.size());
std::cout << sv << '\n';
Run Code Online (Sandbox Code Playgroud)
我相当确定事实并非如此,但我经常对 C++ 感到惊讶。介于和 之间并且reinterpret_cast
始终char*
允许吗?unsigned char*
std::byte*
此外,在此类转换中添加合法的内容,例如:const
std::array<char, 2> arr = {'a', 'b'};
auto* p = reinterpret_cast<const std::byte*>(arr.data());
Run Code Online (Sandbox Code Playgroud)
再次,我怀疑这是合法的,因为它说
AliasedType 是 DynamicType 的有符号或无符号变体(可能是 cv 限定的)
但我想reinterpret_cast
一劳永逸地确定。
我试图用模板替换代码中的所有宏。我有一个宏,它绑定this
到函数的第一个参数,以便可以在静态上下文中使用成员函数。如何使用模板来实现?
我想要此功能:
#define BIND_EVENT_FN(func) std::bind(&func, this, std::placeholders::_1)
Run Code Online (Sandbox Code Playgroud)
或使用lambda:
#define BIND_EVENT_FN(func) [this](Event& e){ return func(e); }
Run Code Online (Sandbox Code Playgroud)
与此类似的东西,但显然不完全像这样,因为它不能编译:
template<class T>
auto bind_event_fn(T& func)
{
return [this](Event&& e){ return func(e); };
}
Run Code Online (Sandbox Code Playgroud)
下面的最小工作示例,是否可以替换宏?
#include <functional>
#include <iostream>
#define LAMBDA_BIND_FN(fn) [this](const int& event) { return fn(event); }
#define BASIC_BIND_FN(func) std::bind(&func, this, std::placeholders::_1)
void run_in_static_context(std::function<void(const int&)> fn)
{
fn(42);
}
class A {
public:
A()
{
run_in_static_context(LAMBDA_BIND_FN(A::member_fn));
}
private:
void member_fn(const int& event)
{
std::cout << "Event: " << event << std::endl;
} …
Run Code Online (Sandbox Code Playgroud) 我有一个最小的GStreamer程序:
#include <gst/gst.h>
int main() {
gst_init(NULL, NULL);
gst_deinit();
}
Run Code Online (Sandbox Code Playgroud)
我使用gcc test.c $(pkg-config --cflags --libs gstreamer-1.0) -fsanitize=address
(gcc 版本为 12.1.0)构建它,运行它并从地址清理器获得以下输出:
==87326==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 16384 byte(s) in 1 object(s) allocated from:
#0 0x7f53e28bfa89 in __interceptor_malloc /usr/src/debug/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7f53e26c1b19 in g_malloc (/usr/lib/libglib-2.0.so.0+0x5db19)
SUMMARY: AddressSanitizer: 16384 byte(s) leaked in 1 allocation(s).
Run Code Online (Sandbox Code Playgroud)
我是 GStreamer 和 GLib 的新手。这对于 GStreamer 程序来说正常吗?如果是的话,在使用消毒剂运行单元测试时,有什么优雅的方法可以忽略这种泄漏?