Skip to main content

How to use gdb in Ubuntu Terminal

Here's a practical, minimal guide for using GDB in Ubuntu terminal — from launching to setting breakpoints and navigating your code. 🧰 Step 1: Compile with Debug Symbols Use -g and disable optimizations ( -O0 preferred for debugging): bash Copy Edit g++ -g -O0 -o myprog myprog.cpp 🚀 Step 2: Launch GDB bash Copy Edit gdb ./myprog You'll see a (gdb) prompt. 🎯 Step 3: Set Breakpoints You can set breakpoints in three main ways : ✅ a. At a function gdb Copy Edit (gdb) break main ✅ b. At a specific file and line gdb Copy Edit (gdb) break myprog.cpp:42 ✅ c. At a method in a class gdb Copy Edit (gdb) break MyClass::doSomething If the symbol is mangled (C++), GDB usually demangles automatically, especially if compiled with -g . ▶️ Step 4: Run the Program gdb Copy Edit (gdb) run 🧭 Step 5: Navigate Command Meaning next or n Step over current line step or s Step into function call finish Run until current function returns continue or c Continue until...

Write program in C/cpp to reduce image disk size (chatGpt discussions)

Write a program in cpp/c that will take Unix folder path as input Then search for each ing in that folder Reduce img disk size and put original img in folder original inside that input folder, save reduced img with same name in that folder
ChatGPT said:

Here’s a high-performance C++ program using OpenCV and C++17 that:

  1. Accepts a folder path as input.

  2. Iterates all image files in that folder (.jpg, .jpeg, .png, etc.).

  3. Moves the original to a subfolder original/ (creating if not exists).

  4. Compresses/resizes each image to reduce size.

  5. Saves the reduced image with same filename in original location.


Requirements

Install OpenCV:

bash
sudo apt install libopencv-dev

Compile with:

bash
g++ -std=c++17 -O2 img_reduce.cpp -o img_reduce `pkg-config --cflags --libs opencv4`

Code: img_reduce.cpp

cpp
#include <iostream> #include <filesystem> #include <opencv2/opencv.hpp> namespace fs = std::filesystem; bool is_image(const fs::path& path) { std::string ext = path.extension().string(); for (auto& c : ext) c = std::tolower(c); return ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp"; } void reduce_image_size(const fs::path& img_path, const fs::path& original_dir) { try { cv::Mat img = cv::imread(img_path.string(), cv::IMREAD_UNCHANGED); if (img.empty()) { std::cerr << "Failed to read image: " << img_path << "\n"; return; } // Save original in 'original' folder fs::path orig_path = original_dir / img_path.filename(); fs::rename(img_path, orig_path); // Resize/compress image (resize to 70% and re-encode) cv::Mat reduced_img; cv::resize(img, reduced_img, cv::Size(), 0.7, 0.7, cv::INTER_AREA); std::vector<int> compression_params; if (img_path.extension() == ".jpg" || img_path.extension() == ".jpeg") { compression_params.push_back(cv::IMWRITE_JPEG_QUALITY); compression_params.push_back(70); // quality 0-100 } else if (img_path.extension() == ".png") { compression_params.push_back(cv::IMWRITE_PNG_COMPRESSION); compression_params.push_back(3); // 0-9 (lower = better quality) } cv::imwrite(img_path.string(), reduced_img, compression_params); std::cout << "Processed: " << img_path.filename() << "\n"; } catch (const std::exception& e) { std::cerr << "Error processing " << img_path << ": " << e.what() << "\n"; } } int main() { std::string folder_path; std::cout << "Enter folder path: "; std::getline(std::cin, folder_path); fs::path input_dir(folder_path); if (!fs::exists(input_dir) || !fs::is_directory(input_dir)) { std::cerr << "Invalid folder path.\n"; return 1; } fs::path original_dir = input_dir / "original"; fs::create_directory(original_dir); for (auto& entry : fs::directory_iterator(input_dir)) { if (fs::is_regular_file(entry.path()) && is_image(entry.path())) { reduce_image_size(entry.path(), original_dir); } } std::cout << "Image processing complete.\n"; return 0; }

🧪 Example

Suppose your folder is:

swift
/home/user/images/

You run:

bash
./img_reduce Enter folder path: /home/user/images

It will:

  • Move /home/user/images/pic1.jpg/home/user/images/original/pic1.jpg

  • Create reduced /home/user/images/pic1.jpg


✅ Output

  • Reduced size image with same filename in original folder.

  • Original image preserved inside original/.


Let me know if you want a pure C version (more complex due to lack of high-level image handling) or integration into a REST API or GUI.

Comments

Popular posts from this blog

Ubuntu Notes: Set up autossh as systemd useful-reminder commands

 sudo vim /etc/systemd/system/permanentAutossh.service ======================================== [Unit] Description=Keeps a tunnel to myOciFreeNat open After=network-online.target [Service] User=<username> Environment="AUTOSSH_GATETIME=0" ExecStart=/usr/bin/autossh -M 0 -q -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -L 4322:127.0.0.1:5432 -i /<ssh_private_key_file_absolute_path> <username>@<ip_address> -p 22 [Install] WantedBy=multi-user.target ======================================== sudo systemctl daemon-reload sudo systemctl enable permanentAutossh sudo systemctl start permanentAutossh ================== sudo systemctl daemon-reload sudo systemctl restart permanentAutossh sudo systemctl status permanentAutossh ====================== sudo systemctl stop permanentAutossh sudo systemctl disable permanentAutossh sudo rm /etc/systemd/system/permanentAutossh.service

syslog cpp programming: learning using chatGcp

  Introduction to Syslog C++ August 27, 2024 This conversation may reflect the link creator’s personalized data, which isn’t shared and can meaningfully change how the model responds. You said: I am new to syslog in cpp programming n just starting. Can you teach me ChatGPT said: ChatGPT Sure! syslog is a standard for logging system messages in Unix-like operating systems. It provides a way to send log messages to the system log, which can then be collected and analyzed by various tools. Here's a basic guide to get you started with syslog in C++: 1. Include the Necessary Header To use syslog , you need to include the syslog.h header: cpp Copy code # include <syslog.h> 2. Open the Connection to syslog Before sending log messages, you need to open a connection to the syslog system. This is typically done at the start of your program: cpp Copy code openlog ( "your_program_name" , LOG_PID | LOG_CONS, LOG_USER); "your_program_name" : A string representing ...

Ubuntu - C++ Notes: Install & update boost c++ library from git (may contain some error in process mentioned below)

 Boost C++ Library Installation from git in ubuntu: 1. create a directory named boost in your desired location and go to that directory mkdir boost;cd boost; 2. clone boost recursively from git using command git clone --recursive https://github.com/boostorg/boost.git 3. cd boost; sudo ./bootstrap.sh; 4. sudo ./b2; 5. sudo ./b2 install; DONE! --------------------------- Boost C++ Library Update Verson from git in Ubuntu: 1. go to gitDownloads/boost directory cd gitDownloads/boost; 2. git pull; 3. git submodule update --recursive; 4. cd boost; sudo ./bootstrap.sh; 5. sudo ./b2; 6. sudo ./b2 install; DONE!